如何检查Python中是否同时释放了两个键?
在python中,我试图得到一个类似乒乓球的游戏。我有在tkinter画布中移动划片的代码如何检查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
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
。