RSS RSS
fujiwara_blog
2009.08.13
カテゴリ:

[python]プロトタイプをcursesで

みなさんはプログラムのアイデアが浮かんだとき、ロジックはできたのに、それを表現する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がさらっと作れます。皆さんもぜひ一度お試し下さい。

ブックマークに追加する

.
web開発ならKBMJ
Rubyでのwebシステム開発は
実績豊富なKBMJにお任せ下さい
iPhone開発
iPhone開発は
KBMJにお任せ下さい
ブラウザゲーム エインヘリアル
ブラウザゲーム「エインへリアル」
αテスター募集中
オープンソースECパッケージ エレコマ
オープンソースECパッケージ
「エレコマ」

プロフィール

fujiwara
fujiwara
主にRuby,Python,Flexの情報を公開していく予定です。

最近チェックした記事

最新記事

アーカイブ

アクセスランキング

KBMJのWebソリューション
Ruby on railsの開発ならKBMJ
株式会社ケイビーエムジェイ