[英]Moving an object (square) using tkinter in python
我正在尝试使用WASD键移动正方形,在实现过程中,尝试在函数update函数中传递参数时遇到了麻烦。 我希望它能够监听键盘上的事件。 谁能帮我?
class Robot(object):
def __init__(self):
self.speed = [0, 0] # iniital speed ste to 0
self.image = window.create_rectangle(0, 0, 20, 20, fill="white") # sample robot
window.bind_all("<KeyPress-w>", self.update)
window.bind_all("<KeyPress-a>", self.update)
window.bind_all("<KeyPress-s>", self.update)
window.bind_all("<KeyPress-d>", self.update)
# window.bind_all("<KeyPress-x>", self.deploy)
def move(self, object, x, y):
window.move(self.image, x, y)
def update(self, event):
if event.keysym == 'D':
self.speed[1] = 1
self.move(self.image, self.speed[0], 0)
if event.keysym == "A":
self.speed[1] = -1
self.move(self.image, self.speed[0], 0)
if event.keysym == "W":
self.speed[0] = -1
self.move(self.image, 0, self.speed[1])
if event.keysym == "S":
self.speed[0] = 1
self.move(self.image, 0, self.speed[1])
def deploy(self):
pass
这是运行点
while True:
pl1 = Robot()
pl1.update() # here is the problem
tk.update()
time.sleep(10)
第一个问题是,你正在使用time.sleep
结冰的Tkinter的主循环,防止其对键盘事件作出反应。 您不需要while True
循环,只需执行Tk实例的mainloop
。
第二个问题是您在调用Robot.update
方法时未传递预期的参数event
。 不必自己做,每次按下其中一个键时,键盘绑定都会触发它。
我认为我对问题的回答( 尝试通过播放器输入使对象通过tkinter在网格中移动)对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.