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)
按其他键会导致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)