Python:无重复延迟的键盘输入

标签 python windows input tkinter keyboard

对于那些不知道的人,重复延迟是在按住一个键时,第一个出现的字母和它重复之间的轻微停顿。这在打字时可能是一个有用的功能,但是当您开始编写游戏时,它变得非常烦人。一个例子是当你需要移动一个角色时;它会移动一点点,暂停,然后再次开始移动。 Tkinter 代码:

ball = canvas.create_rectangle(50, 50, 100, 100)
def move():
   canvas.move(ball, 0, 3)
canvas.bind_all("<space>", move)

如果按下空格,小球将向下移动 3 个像素,暂停,然后开始正常移动。我想知道是否有任何方法可以避免这种暂停,例如直接从键盘读取的模块,而不是 Windows 处理的键盘。我知道有可能“作弊”,例如,当您预计会发生延迟时自动运行该功能;遗憾的是,这是不准确的,可能会导致不稳定的运动。提前致谢

最佳答案

按下时进行递归循环。或者,至少我是这样做的。

moving = False
def move():
  global moving
  moving = True
def stop_moving():
  global moving
  moving = False

def myloop():
  global moving
  if moving == True:
    canvas.move(ball, 0, 3)
  root.after(1, myloop)

root.bind('<space>', lambda e: move())
root.bind('<KeyRelease-space>', lambda e: stop_moving())

只需确保在 root.mainloop() 之前调用循环一次
#like this
root.after(1, myloop)
root.mainloop()

关于Python:无重复延迟的键盘输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31276357/

相关文章:

Javascript:如何返回具有多组输入的函数总和

javascript - val() 函数给出控制台错误

html - 我可以添加输入类型为数字的模式属性吗?

python - Tkinter 从顶层销毁 root

python - python 中的正则表达式 :groups and |

python - CNN 中的 8 个预定义二进制卷积滤波器 - Tensorflow

windows - 在 Windows 和 Ubuntu Emacs for PHP 中接收 Flymake 错误

c++ - 我可以在 std::map 中使用 CComPtr 吗?

python - 模型如何才能在随机数据上获得完全相同的准确性?

windows - qt 应用程序 64 位 Windows