cursesはターミナル上の操作を行うライブラリです。 windowの様に画面に枠を書いたり、文字に色を付けたりなどが簡単にできる様になっています。GUIほどきれいなものはできませんが、ただの文字よりは洗練されたUIが作れます。 今回はpythonでターミナルUIを使ったチャットプログラムをつくってみました。 ソースはこちら。chat.py
python2.6.1で動作確認しています。
使い方は
でサーバ起動、
でクライアント起動です。 起動すると下図のような画面が表示されます。
枠線と色がついただけですが、けっこう見栄えがすると思いませんか?
さて、cursesを使うときのきもの部分をちょっと解説します。
class CursesWindow():
def __init__(self,host=''):
locale.setlocale(locale.LC_ALL,'')
curses.wrapper(self.loop,host)
コンストラクタで、curses.wrapperを呼び出しています。
このラッパーがなかなかのやり手で、必要な初期化処理をしてくれた上に、 例外が発生したときにターミナルの状態を復元して終了してくれます。 これをせずに、cursesを使ったプログラムが例外で落ちると、ターミナルに文字を打ち込んでも表示されなくなったりして、大いに困ります。
localeの設定は日本語の表示で必要らしいです。よくわかりませんが、おまじない。
wapperに渡しているloopはメイン処理を行う関数です。 中でループをまわしてチャットの受信、送信処理を行っています。
準備はこれで終わりです。なんと簡単!。
あとはloop関数にわたってきたWindowオブジェクトを使って、枠線を書いたり文字を書いたりします。
このようにcursesを使うとGUIには劣るものの、そこそこ見栄えのいいUIがさらっと作れます。皆さんもぜひ一度お試し下さい。