Python3 + Curses:如何按" q"立即结束程序?

时间:2014-06-19 14:05:06

标签: python python-3.x ncurses curses python-curses

当我运行以下示例代码并按下" q"时,它会正常结束, 但如果我按下任何其他角色"例如许多休息和许多其他角色"然后按" q"它不会退出,我该如何解决?

import curses, time

def main(sc):
    sc.nodelay(1)

    while True:
        sc.addstr(1, 1, time.strftime("%H:%M:%S"))
        sc.refresh()

        if sc.getch() == ord('q'):
            break

        time.sleep(1)

if __name__=='__main__': curses.wrapper(main)

2 个答案:

答案 0 :(得分:6)

按其他键会导致time.sleep(1)来电,您应等待n秒(n =其他击键次数)。

删除time.sleep来电可以解决您的问题。

def main(sc):
    sc.nodelay(1)

    while True:
        sc.addstr(1, 1, time.strftime("%H:%M:%S"))
        sc.refresh()

        if sc.getch() == ord('q'):
            break

        #time.sleep(1) <------

替代方案:有条件地调用time.sleep(仅当未按任何键时,如果在非阻止模式下未按任何键,则getch将返回-1):

while True:
    sc.addstr(1, 1, time.strftime("%H:%M:%S"))
    sc.refresh()

    key = sc.getch()
    if key == ord('q'):
        break
    elif key < 0:
        time.sleep(1)

答案 1 :(得分:0)

函数window.timeout(delay)很可能是您正在寻找的。设置超时后,getch将等待delay毫秒,然后返回-1。

尽管使用time.sleep(seconds)会有效,timeout会更加清晰,并且由于sleep将用户输入的处理延迟seconds,所以会提供更流畅的用户体验