python curses.newwinが機能していません
質問
私は初めて呪いを学んでいますが、Pythonでそれをやることにしました。それは絶えず再コンパイルするよりも簡単だからです。しかし、私はヒッチにぶつかりました。 SecCondウィンドウを更新しようとすると、出力がありません。これがコードスニペットです:
import curses
win = curses.initscr()
curses.noecho()
curses.cbreak()
curses.curs_set(0)
field = curses.newwin(1, 20, 1, 1)
field.addstr(0, 0, "Hello, world!", curses.A_REVERSE)
field.refresh()
INITSCR()で初期化された通常のWINウィンドウは機能しますが、フィールドウィンドウは表示されません。何か助けがありますか?
編集:ここに新しい改訂されたコードがありますが、それでも機能しません。
import curses
ex = None
def main(stdscr):
global ex
try:
curses.curs_set(0)
except Exception, e:
ex = e
field = curses.newwin(25, 25, 6, 6)
field.border()
cont = True
x, y = 0, 0
while cont:
stdscr.clear()
field.clear()
coords = "%d, %d" % (x, y)
stdscr.addstr(5, 5, coords, curses.A_REVERSE)
field.addstr(y+2, x+2, "@", curses.A_BOLD)
chr = stdscr.getkey()
if chr == 'h':
if x > 0: x -= 1
if chr == 'l':
if x < 20: x += 1
if chr == 'j':
if y > 0: y -= 1
if chr == 'k':
if y < 20: y += 1
if chr == 'q':
cont = False
stdscr.clear()
field.clear()
stdscr.noutrefresh()
field.noutrefresh()
curses.doupdate()
curses.wrapper(main)
if ex is not None:
print 'got %s (%s)' % (type(ex).__name__, ex)
解決 2
ああ、問題を見つけました。 stdscr.clear()を使用すると、新しいウィンドウを含む端末全体がクリアされています。私がする必要があるのは、2つのウィンドウを作成することだけです。
ああ、上記のCurses.Wrapperのヒントをありがとう。コメントを投稿できないのでここで言っています。
他のヒント
私には大丈夫のようです - 私はいつも使用しています curses.wrapper
そして、私の端末は0のカーソルの可視性をサポートしていないので、これは私が持っているものです...:
import curses
ex = None
def main(stdscr):
global ex
try:
curses.curs_set(0)
except Exception, e:
ex = e
field = curses.newwin(1, 20, 1, 1)
field.addstr(0, 0, "Hello, world!", curses.A_REVERSE)
field.refresh()
field.getch()
curses.wrapper(main)
if ex is not None:
print 'got %s (%s)' % (type(ex).__name__, ex)
逆になった「こんにちは、世界!」が見えます。 getch
プログラムは、予想されるMSGで終了します got error (curs_set() returned ERR)
.
このプログラムで何を見ていますか...? (ラッパーは覚えておいてください initscr
とセット noecho
と cbreak
- そしてさらに重要なことに、完了したときにリセットすることです。だから私はいつもそれを使用しています;-)。
ところで、私はMac(OSX 10.5.8)とTerminal.AppでPY 2.6.4を使用しています。あなたのプラットフォーム...?
所属していません StackOverflow