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

M. *_*del 4 python curses ncurses python-3.x 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)
Run Code Online (Sandbox Code Playgroud)

fal*_*tru 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) <------
Run Code Online (Sandbox Code Playgroud)

替代方案: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)
Run Code Online (Sandbox Code Playgroud)