我第一次学习咒语,我决定用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)发布于 2010-07-04 02:50:42
啊,找到问题了。当我使用stdscr.clear()时,它会清除整个终端,包括新窗口。我所需要做的就是做两个窗口,每个窗口对应一个单独的显示器。
哦,还要感谢上面关于curses.wrapper的提示。在这里说是因为我不能发表评论。
发布于 2010-07-03 13:43:22
对我来说似乎没问题--我总是使用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)我看到相反的"Hello,world!",然后当我按任何键来满足getch时,程序以预期的消息got error (curs_set() returned ERR)终止。
你在这个节目里看到了什么...?(请记住,包装器执行initscr并设置noecho和cbreak --更重要的是,在完成时重置它,这就是我总是使用它的原因;-)。
顺便说一句,我在Mac (OSx 10.5.8)和Terminal.App上使用Py 2.6.4。你的政纲...?
https://stackoverflow.com/questions/3170406
复制相似问题