4

当我运行以下示例代码并仅按“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)
4

2 回答 2

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)
于 2014-06-19T14:08:14.153 回答
0

该功能window.timeout(delay)很可能是您正在寻找的。一旦设置了超时,将在返回 -1 之前getch等待毫秒。delay

虽然使用time.sleep(seconds)会工作,timeout但更干净,并且由于将sleep用户输入的处理延迟了seconds.

于 2017-05-30T06:01:56.063 回答