Specifically, this is the part giving an error:
def mouse_movement(self, angle, event= "<Motion>"): x, y = event.x, event.y relx, rely = x - self.player_coord_x, self.player_coord_y self.angle = (180 / math.pi) * -math.atan2(rely, relx) p = Image.open("tank.png") p.rotate(angle) p2 = ImageTk.PhotoImage(p) p2.image = p2 player2 = c.create_image(self.coords, self.coords, image=p2)
In this part of the code, I am passing a parameter called
event. It binds the mouse to the player’s movement. However, it is giving me an Attribute Error:
Exception in Tkinter callback Traceback (most recent call last): File "C:UsersoffcampusAppDataLocalProgramsPythonPython38-32libtkinter__init__.py", line 1883, in __call__ return self.func(*args) File "C:UsersoffcampusDesktopGameFoldermain.py", line 131, in <lambda> c.bind_all("<Motion>", lambda x2: player.mouse_movement(180)) File "C:UsersoffcampusDesktopGameFoldermain.py", line 50, in mouse_movement x, y = event.x, event.y AttributeError: 'str' object has no attribute 'x'
The program is taking the event parameter as a string, instead of taking it as a mouse binding. What am I doing wrong in this case?
You forgot to pass the event in, therefore it’s using the default event which you defined as the string
"<Motion>". To fix it, pass in the event object (which you have named
c.bind_all("<Motion>", lambda x2: player.mouse_movement(180, x2))