这感觉像是一个非常琐碎的问题,但经过数小时的搜索和实验,我无法找到一个单一的解决方案
我用咒语用键盘键移动我的机器人,它按预期工作,但有一件事,每次点击“getch()”时,它会执行之前按下的键,即使没有按下任何键,这会造成“滞后”情况
这是一个非常简单的场景,我创建来解释我自己,在这里让我们说,我按下“a”,它工作正常,我保持按下约4秒,然后释放,现在,即使没有按下任何按钮,此代码也会一次又一次地执行,因为curses会对我在此期间按下的所有“a”执行x次。sleep:
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")
我的问题是:是否有某种代码可以:
curses.ClearAnyPreviousInput()
ThisKeyIsBeingPressedRightNow = stdscr.getch()
如果可能的话,一些不会强迫我杀死并重新启动一切的东西
看来你需要curses.flushinp()
最终,您可以尝试删除重复的关键点
(在回答Configure key repeat delay to detect if key is being pressed的
C
代码中找到)相关问题 更多 >
编程相关推荐