如何检查Python中是否同时释放了两个键?

如何检查Python中是否同时释放了两个键?,python,tkinter,keyboard,tkinter-canvas,Python,Tkinter,Keyboard,Tkinter Canvas,在python中,我试图得到一个类似乒乓球的游戏。我有在tkinter画布中移动划片的代码 self.canvas.bind_all("<KeyPress-Left>", self.change_dir) self.canvas.bind_all("<KeyPress-Right>", self.change_dir) ... def change_dir(self, e): if e.keysym == "Left": self.x = -2

在python中,我试图得到一个类似乒乓球的游戏。我有在tkinter画布中移动划片的代码

self.canvas.bind_all("<KeyPress-Left>", self.change_dir)
self.canvas.bind_all("<KeyPress-Right>", self.change_dir)
...
def change_dir(self, e):
   if e.keysym == "Left":
       self.x = -2
   elif e.keysym == "Right":
       self.x = 2
self.canvas.bind\u all(“,self.change\u dir)
self.canvas.bind\u all(“,self.change\u dir)
...
def change_dir(自我,e):
如果e.keysym==“左”:
self.x=-2
elif e.keysym==“右”:
self.x=2
self.x是指示方向的拨杆速度。但是,此代码导致用户只需按一次键,然后拨杆就会改变方向。我想让它做的是,用户必须按住键才能移动。我没办法让它停下来。我有个主意,但不管用

self.canvas.bind_all("<KeyRelease-Right><KeyRelease-Left>", self.change_dir)
self.canvas.bind\u all(“,self.change\u dir)

有人知道我如何检查左右键是否同时释放吗?谢谢

可能您想得太多了:按
键时,您可以向左移动拨片,按
键时,可以向右移动拨片,忽略
按键释放
事件

下面的示例对拨杆的行为进行编码,使拨杆在按下
left
键时向左移动,释放时停止,按下
right
键时向右移动

import tkinter as tk


def move_paddle(event=None):
    dx = 0
    if event.keysym == "Left":
        dx = -1
    elif event.keysym == 'Right':
        dx = 1
    x0, y0, x1, y1 = canvas.coords(paddle)
    if x0 < 1:
        dx, x0, x1 = 0, 1, PADDLEWIDTH + 1
    elif x1 > WIDTH:
        dx, x0, x1 = 0, WIDTH - PADDLEWIDTH, WIDTH
    canvas.coords(paddle, x0+dx, y0, x1+dx, y1)        


WIDTH, HEIGHT = 100, 30
PADDLEWIDTH = 30

root = tk.Tk()
canvas = tk.Canvas(root, width=WIDTH, height = HEIGHT)
canvas.pack(expand=True, fill=tk.BOTH)

paddle = canvas.create_rectangle((10, 10), (40, 20), fill='red', outline='black')
canvas.bind_all("<KeyPress-Right>", move_paddle)
canvas.bind_all("<KeyPress-Left>", move_paddle)

root.mainloop()
将tkinter作为tk导入
def移动桨(事件=无):
dx=0
如果event.keysym==“Left”:
dx=-1
elif event.keysym=='Right':
dx=1
x0,y0,x1,y1=画布坐标(桨)
如果x0<1:
dx,x0,x1=0,1,桨叶宽度+1
elif x1>宽度:
dx,x0,x1=0,宽度-桨叶宽度,宽度
画布坐标(桨,x0+dx,y0,x1+dx,y1)
宽度,高度=100,30
桨叶宽度=30
root=tk.tk()
canvas=tk.canvas(根,宽度=宽度,高度=高度)
canvas.pack(expand=True,fill=tk.BOTH)
划桨=画布。创建矩形((10,10)、(40,20),填充为红色,轮廓为黑色)
canvas.bind_all(“,move_blade)
canvas.bind_all(“,move_blade)
root.mainloop()

为什么您同时需要它们?您不能单独添加它们吗?即使同时物理释放,键码也会一个接一个地发送。您可以将
绑定到回调,并在回调中设置
self.x=0