Python:键盘输入没有重复延迟

时间:2015-07-07 18:16:57

标签: 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处理过的键盘。我知道有可能&#34;欺骗&#34;例如,当您预期发生延迟时自动运行该功能;遗憾的是,这是不准确的,可能导致波动。提前致谢

1 个答案:

答案 0 :(得分:0)

在按下时进行递归循环。至少我就是这样。

viewDidLoad()

只需确保在root.mainloop()之前调用一次循环

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())