Python3 + Curses:如何按“q”立即结束程序?
当我运行下面的示例代码,只按“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
你可能在找的就是这个函数 window.timeout(delay)
。一旦你设置了超时时间,getch
就会在等待 delay
毫秒后返回 -1。
虽然使用 time.sleep(seconds)
也能实现这个功能,但 timeout
的方式要干净很多,用户体验也更顺畅,因为 sleep
会让程序处理用户输入的时间延迟长达 seconds
秒。
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)