Python Tkinter:删除键盘双击保护
我正在使用Tkinter编写Asteroids()的python版本 这是让船前进的一段代码:Python Tkinter:删除键盘双击保护,python,tkinter,Python,Tkinter,我正在使用Tkinter编写Asteroids()的python版本 这是让船前进的一段代码: def move(self, sx=0, sy=0, ms=2): try: self.root.after_cancel(self.m) except AttributeError: pass ms += 1 if ms > 30: return self.parent.move(self.ship, sx
def move(self, sx=0, sy=0, ms=2):
try:
self.root.after_cancel(self.m)
except AttributeError:
pass
ms += 1
if ms > 30:
return
self.parent.move(self.ship, sx, sy)
self.m = self.root.after(ms, lambda sx1=sx, sy1=sy, millisec=ms: self.move(sx1, sy1, ms))
这是按下向上箭头时实际运行的功能:
def avanti(self, event):
self.s = -2.5
x = self.s * math.sin(math.radians(self.angle)) * -1
y = self.s * math.cos(math.radians(self.angle))
self.move(x, y)
当你多次按向上箭头键时,代码运行得很好,唯一的问题是当你按住它时,飞船移动一次,然后有一个0.2秒长的小间隙,然后它开始有规律地前进,直到你松开钥匙。我认为计算机会阻止你不停地双击,然后,当它看到你真的想双击时,它会删除这个选项
有没有办法从第一次按下后移除此块
编辑:您实际上可以通过键盘->键入延迟来更改整个计算机上的键入延迟,但我想做的是在python程序上删除延迟 您可以使用
设置向上移动=True
和
设置向上移动=False
,然后您可以在之后使用运行函数,该函数将检查向上移动
和移动对象
工作示例-其他问题的代码(关于移动平台)
将tkinter作为tk导入
#---常数---
显示宽度=800
显示高度=600
中心X=显示宽度//2
中心Y=显示高度//2
#---功能---
#确保平台平稳移动
def up_压力(事件):
全球平台启动
平台向上=真
def up_释放(事件):
全球平台启动
平台向上=错误
def向下按(事件):
全球平台关闭
平台向下=真
def down_释放(事件):
全球平台关闭
平台向下=错误
def eventloop():
#移动平台
如果平台启动:
#移动
画布移动(平台,0,-20)
#检查是否离开画布
x1,y1,x2,y2=画布坐标(平台)
如果y1<0:
#退后
画布移动(平台,0,0-y1)
如果平台关闭:
#移动
画布移动(平台,0,20)
#检查是否离开画布
x1,y1,x2,y2=画布坐标(平台)
如果y2>显示高度:
#退后
画布移动(平台,0,-(y2-显示高度))
root.after(25,eventloop)
#---梅因---
#-初始化-
root=tk.tk()
canvas=tk.canvas(根,宽度=显示宽度,高度=显示高度)
canvas.pack()
#-对象-
平台=画布。创建矩形(中心X-15,中心Y-15,中心X+15,中心Y+15,填充=“绿色”)
平台向上=错误
平台向下=错误
root.bind(“”,向上按)
root.bind(“”,向上释放)
root.bind(“”,向下按)
root.bind(“”,向下释放)
#-主回路-
root.after(25,eventloop)
root.mainloop()
您可以使用
设置变量,即上移=True
和
设置上移=False
。然后您可以使用after
执行函数,该函数将检查move\u up
和move object。
import tkinter as tk
# --- constants ---
DISPLAY_WIDTH = 800
DISPLAY_HEIGHT = 600
CENTER_X = DISPLAY_WIDTH//2
CENTER_Y = DISPLAY_HEIGHT//2
# --- functions ---
# for smooth move of platform
def up_press(event):
global platform_up
platform_up = True
def up_release(event):
global platform_up
platform_up = False
def down_press(event):
global platform_down
platform_down = True
def down_release(event):
global platform_down
platform_down = False
def eventloop():
# move platform
if platform_up:
# move
canvas.move(platform, 0, -20)
# check if not leave canvas
x1, y1, x2, y2 = canvas.coords(platform)
if y1 < 0:
# move back
canvas.move(platform, 0, 0-y1)
if platform_down:
# move
canvas.move(platform, 0, 20)
# check if not leave canvas
x1, y1, x2, y2 = canvas.coords(platform)
if y2 > DISPLAY_HEIGHT:
# move back
canvas.move(platform, 0, -(y2-DISPLAY_HEIGHT))
root.after(25, eventloop)
# --- main ---
# - init -
root = tk.Tk()
canvas = tk.Canvas(root, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT)
canvas.pack()
# - objects -
platform = canvas.create_rectangle(CENTER_X-15, CENTER_Y-15, CENTER_X+15, CENTER_Y+15, fill="green")
platform_up = False
platform_down = False
root.bind('<Up>', up_press)
root.bind('<KeyRelease-Up>', up_release)
root.bind('<Down>', down_press)
root.bind('<KeyRelease-Down>', down_release)
# - mainloop -
root.after(25, eventloop)
root.mainloop()