午後にはゼミに参加したり、講義に出たりした。今日はルーティングテーブルの構成についていろいろと話を聞いた。
夜間はコードを書くことにしているのだが、疲れてそのまま寝てしまった。コードは深夜に起きて書いた。
書いているコードについて、ずいぶん前にどこかのHoriKとかいう人間が、CUI音楽プレイヤーを作りたいとか言っていて、それに関するコードを書いている。
コードはPythonで書いていて、ターミナルの画面制御のライブラリをあれこれ探してみると、py_cuiというのが見つかったからこれを使うことにしている。
py_cuiは、Cなどで画面制御をするときに頻出するncursesをラップしてpythonで使えるようにしたようなライブラリのようであり、実際、ncursesよりも簡単に使えるようになっている。基本的には、
1. 初期化する
2. パーツを配置する
3. start()をコール
という手順で書いていくだけで、簡単にそれっぽい画面を出力できる。
実際に、音楽プレイヤーのプレイリスト編集のために作った画面が以下。
単に画面を書いてくれるだけではなく、ボタンとかの監視までやってくれるのでなかなか気が利いている。メニュー、ラベル、ボタン、ポップアップなど、パーツもそこそこ種類がある。
ncursesを使うときは画面に線を書いても、自発的にはその状態を維持してくれないので、何かしら待たせる処理をして画面を書き直す処理を入れる必要があるのだが、py_cuiは一度画面を書いたあとはライブラリ側で勝手に状態を維持してくれるので、コードは非常に簡潔になる。
とはいえ、これも一長一短かな、と使い始めて思った。というのも、画面の状態を勝手に維持してくれるというのは、裏を返せば、終わるまで処理を返してくれないということであって、時間に依存した画面の書き換えみたいな動作との相性が悪い。このソフトの設計を考えた段階では、次ステップで画面に書く情報をコントローラで作って、それをもとにバウンダリで描画、みたいなことを考えていたが、バウンダリが処理をコントローラに返さない以上、こういうことはできない。特に悩ましいのがプログレスバーの処理で、これは音楽再生開始からの時間を取ってきて、それをもとに画面上に表示する棒の長さを決めるわけだが、時間ごとに再生時間をとってくるみたいな処理がpy_cuiでできないので、コントローラ側で非同期関数を呼んで、この関数によってプログレスバーの書換みたいなことができないか、そういうことを考える必要がある。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。