Python 蟒蛇3+;诅咒:如何按下;q";马上结束节目?
当我运行下面的示例代码并只按“q”键时,它将正确结束, 但是,如果我按下任何其他字符“例如许多中断和许多其他字符”,然后按下“q”,它将不会退出,我如何解决这个问题Python 蟒蛇3+;诅咒:如何按下;q";马上结束节目?,python,python-3.x,ncurses,curses,python-curses,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() ==
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)
按其他键会导致
时间。睡眠(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) <------
该函数很可能就是您正在寻找的函数。设置超时后,getch
将等待delay
毫秒,然后返回-1
虽然使用
time.sleep(seconds)
可以工作,timeout
更干净,并且由于sleep
将用户输入的处理延迟了seconds非常感谢@falsetru的及时回复,但正如我提到的,这是一个示例代码,我的真实代码是一款带有超时/刷新时间选项的顶级应用程序,因此我必须在代码中使用sleep来匹配定义的超时。@M.Adel,有条件地调用time.sleep
怎么样?(仅当未按下任何键时:sc.getch()
返回-1
)@falsetru出色!!请粘贴它作为答案,让我接受它,非常感谢你们的帮助。
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)