Keyevents with self - Python



这里有一段代码:

from tkinter import *
class player():
    def __init__(self, xcoor = 0, ycoor = 0):
        self.xcoor = xcoor
    def leftKey(self, event):
        self.xcoor += 1
        print("Right key pressed")
    def rightKey(self, event):
        self.ycoor += 1
        print("Left key pressed")
world = Tk()
p1 = player()
world.bind('<Left>', player.leftKey)
world.bind('<Right>', player.rightKey)
world.mainloop()

当我运行这个并尝试按键时,无论是向右还是向左,我都会得到这个错误:

TypeError: leftKey() missing 1 required positional argument: 'event'
Exception in Tkinter callback

我认为这个错误是因为(self,event)错了,但我该如何解决呢?我希望它是这样的,如果创建了这个类的对象,那么当通过键绑定调用这个函数时,它的xcoor和ycoor将发生变化。

改为绑定到玩家对象的方法:

world.bind('<Left>', p1.leftKey)
world.bind('<Right>', p1.rightKey)

否则,player.leftKeyplayer.rightKey将引用仍然期望player对象作为第一个参数(self)的未绑定方法。通过引用播放器对象中的方法,该参数是隐含设置的。这是当你只做p1.leftKey(evt)时得到的相同行为,实际上和player.leftKey(p1, evt)是一样的。

最新更新