这似乎是一个非常琐碎的问题,但经过数小时的搜索和试验后,我无法找到一个解决方案。
我正在使用诅咒通过键盘按键移动机器人,它可以按预期工作,但有一点是,每次按下“ getch()”,即使没有按下任何按键,它也会执行以前按下的按键,造成“滞后”情况。
这是我创建的一个非常简单的场景,用以说明自己,在这里,我按了“ a”键,它可以正常工作,我再按住它约4秒钟然后释放,现在此代码将再次执行即使没有按下任何按钮,因为curses会对我在这段时间内按下的所有'a'执行x次。
npm-merge-driver
所以我想,我不想这么做,但是在检查密钥之前,我将完全杀死curses并再次连接它,但是即使在执行完curses之后,它似乎仍在捡拾它不应该使用的密钥(而且我真的不喜欢这种方法,我觉得如果我要一遍又一遍地使用它,就不需要像这样关闭它了),这种情况与上面的情况同样存在问题:
import curses
import time
stdscr = None
def SetupCurses():
global stdscr
stdscr = curses.initscr()
curses.cbreak()
stdscr.keypad(1)
def StartCurse():
key = ''
while key != ord('q'):
stdscr.clear()
stdscr.refresh()
key = stdscr.getch()
if key == ord('a'):
print("\nyou pressed a\n")
time.sleep(5)
print("\nyou can press a again\n")
time.sleep(1)
while(True):
SetupCurses()
StartCurse()
我的问题是:是否有某种代码可以做到:
import curses
import time
stdscr = None
def SetupCurses():
global stdscr
stdscr = curses.initscr()
curses.cbreak()
stdscr.keypad(1)
def StartCurse():
key = ''
while key != ord('q'):
stdscr.clear()
stdscr.refresh()
key = stdscr.getch()
if key == ord('a'):
break
def EndCurse():
global stdscr
curses.nocbreak()
stdscr.keypad(False)
curses.echo()
curses.endwin()
stdscr = None
while(True):
SetupCurses()
print("\nyou can press a again\n")
time.sleep(1)
StartCurse()
EndCurse()
time.sleep(5)
print("\nyou pressed a\n")
如果可能的话,不会迫使我杀死并重新启动一切
答案 0 :(得分:1)
似乎您需要curses.flushinp()
刷新所有输入缓冲区。这会丢弃任何已经 由用户输入,尚未由程序处理。
最终您可以尝试删除重复的键
new_key = stdscr.getch()
while new_key == key:
new_key = stdscr.getch()
key = new_key
(在C
代码中找到了Configure key repeat delay to detect if key is being pressed的答案)