Python で Curses のサンプルを書いてみた

powered by Fotopedia

さて、 curses が入ったところで、早速使ってみようと思って下に目を通す

PythonCurses プログラミング
http://www.python.jp/doc/nightly/howto/curses.html

そこに 「curses.wrapperを使っとくと何かと捗るよ」的な記述がある
だけど具体的なサンプルがない
試しに何も考えずに関数を curses.wrapper に渡してみると、
「引数1個与えたいんだけど」的な感じでエラーになった 

[mitsuaki@localhost curses_test]$ cat cursestest.py
# -*- coding: utf-8 -*-
import curses
def curses_main():
    pass
curses.wrapper(curses_main)
[mitsuaki@localhost curses_test]$ python cursestest.py 
Traceback (most recent call last):
  File "cursestest.py", line 5, in 
    curses.wrapper(curses_main)
  File "/usr/local/lib/python2.7/curses/wrapper.py", line 43, in wrapper
    return func(stdscr, *args, **kwds)
TypeError: curses_main() takes no arguments (1 given)
[mitsuaki@localhost curses_test]$ 

 

引数を1個与えると、無事呼べたようです
こういうのって Pythonista のかたは REPL で確認しちゃううですか?

[mitsuaki@localhost curses_test]$ cat cursestest.py
# -*- coding: utf-8 -*-
import curses
def curses_main(args):
    pass
curses.wrapper(curses_main)
[mitsuaki@localhost curses_test]$ python cursestest.py 
[mitsuaki@localhost curses_test]$ 

 

やっと使えるようになったのでサンプルを作ってみる
ちなみに console を密接に使うせいなのか、 試した限り Eclipse の pydev ではまともに動かせなかった
なのでこのサンプルはコマンドラインからの起動でしか試していないです
curses の目的からするとアレなサンプルですが、
1行読み込んでそれをどんどん下に追加していくプログラムです 
"q" で終了します 

# -*- coding: utf-8 -*-
import curses

def curses_main(args):
    w    = curses.initscr()
    curses.echo()
    while 1:
        w.addstr(0, 0, ">")
        w.clrtoeol()
        s   = w.getstr()
        if s == "q":    break
        w.insertln()
        w.addstr(1, 0, "[" + s + "]")

curses.wrapper(curses_main)

 https://gist.github.com/1885105

f:id:quwahara:20120222224000p:plain

 

 

 

これで何とか使い始められそうだ~