当我运行以下示例代码并按下" 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)
答案 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
,所以会提供更流畅的用户体验