この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
みなさんはプログラムのアイデアが浮かんだとき、ロジックはできたのに、それを表現するUIが書けなくて悩んだ事はありませんか? GUIは手間がかかるし、文字だけだと味気ない。 そんなときにはcursesです。
cursesはターミナル上の操作を行うライブラリです。 windowの様に画面に枠を書いたり、文字に色を付けたりなどが簡単にできる様になっています。GUIほどきれいなものはできませんが、ただの文字よりは洗練されたUIが作れます。 今回はpythonでターミナルUIを使ったチャットプログラムをつくってみました。 ソースはこちら。chat.py
python2.6.1で動作確認しています。
使い方は$ python chat.py -s
でサーバ起動、$ python chat.py
でクライアント起動です。 起動すると下図のような画面が表示されます。
枠線と色がついただけですが、けっこう見栄えがすると思いませんか?
さて、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がさらっと作れます。皆さんもぜひ一度お試し下さい。