繁体   English   中英

在python中使用tkinter移动对象(正方形)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM