Python Tkinter:删除键盘双击保护

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

我正在使用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, 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()