gpt4 book ai didi

python - Tkinter:删除键盘双击预防

转载 作者:太空宇宙 更新时间:2023-11-03 15:45:45 25 4
gpt4 key购买 nike

我正在使用 Tkinter 编写 Python 版本的 Asteroids ( https://en.wikipedia.org/wiki/Asteroids_(video_game) )。

这是让船继续前进的代码段:

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 秒长的小中断,然后它开始有规律地前进,直到松开 key 。我认为计算机会阻止你双击,然后,当它发现你确实想要双击时,它会删除这种阻止。

有没有办法从第一次按下后删除这个 block ?

编辑:您实际上可以通过键盘 -> 打字延迟来更改整个计算的打字延迟,但我想要做的是仅删除延迟关于Python程序。

最佳答案

您可以使用<Up>设置move_up = True<KeyRelease-Up>设置move_up = False然后你可以使用after运行将检查 move_up 的函数并移动对象。

工作示例 - 来自其他问题的代码(关于移动平台)

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

关于python - Tkinter:删除键盘双击预防,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41778896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com