【问题标题】:python curses.newwin not workingpython curses.newwin 不工作
【发布时间】:2011-03-11 08:51:18
【问题描述】:

我是第一次学习 curses,我决定用 python 来做,因为它比不断地重新编译更容易。然而,我遇到了麻烦。当我尝试更新第二个窗口时,我没有得到任何输出。这是一个代码sn-p:


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)

【问题讨论】:

    标签: python windows window curses


    【解决方案1】:

    对我来说似乎没问题——我总是使用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 并设置noechocbreak - 更重要的是在完成时重置它,这就是我总是使用它的原因;-)。

    顺便说一句,我在 Mac (OSx 10.5.8) 和 Terminal.App 上使用 Py 2.6.4。你的平台...?

    【讨论】:

      【解决方案2】:

      啊,找到问题了。当我使用 stdscr.clear() 时,它会清除整个终端,包括新窗口。我需要做的就是制作两个窗口,一个用于单独的显示。

      哦,感谢上面的 curses.wrapper 提示。在这里说是因为我无法发表评论。

      【讨论】:

        猜你喜欢
        • 2020-07-18
        • 2012-03-03
        • 2018-11-06
        • 2014-05-18
        • 2015-01-13
        • 2012-02-21
        • 2014-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多