У меня есть код для создания круга с определенным размером и цветом, который перемещается по экрану. Это моя первая попытка сделать что-то подобное с объектами, так как в первый раз, когда я сделал это, я все это жестко закодировал.
import tkinter as tk
class Head:
def __init__(self, location, color, size, speed):
self.location = location
self.color = color
self.size = size
self.speed = speed
player = Head([375, 375], "orange4", 75, 5)
def movement(event, mover):
key = event.keysym
if key == "Right":
window.move(mover, player.speed, 0)
elif key == "Left":
window.move(mover, -player.speed, 0)
elif key == "Up":
window.move(mover, 0, -player.speed)
elif key == "Down":
window.move(mover, 0, player.speed)
window = tk.Tk()
window.title("Tour")
display = tk.Canvas(window, width=750, height=750)
display.pack()
player = display.create_oval((player.location[0] - (player.size / 2)), (player.location[1] - (player.size / 2)),
(player.location[0] + (player.size / 2)), (player.location[1] + (player.size / 2)),
fill=player.color)
window.bind_all("<Key>", lambda event: movement(event, mover=player))
window.mainloop()
Когда я запускаю этот код, я получаю ошибку AttributeError: '_tkinter.tkapp' object has no attribute 'move'
, когда пытаюсь переместить с помощью клавиш со стрелками. Я попытался изменить переменную window
на переменные player
и display
, но она все еще не работала.
После того, что jasonharper и acw1668 сказали, что я изменил код на это:
import tkinter as tk
class Head:
def __init__(self, location, color, size, speed):
self.location = location
self.color = color
self.size = size
self.speed = speed
player = Head([375, 375], "orange4", 75, 5)
def movement(event, mover):
key = event.keysym
if key == "Right":
display.move(mover, player.speed, 0)
elif key == "Left":
display.move(mover, -player.speed, 0)
elif key == "Up":
display.move(mover, 0, -player.speed)
elif key == "Down":
display.move(mover, 0, player.speed)
window = tk.Tk()
window.title("Tour")
display = tk.Canvas(window, width=750, height=750)
display.pack()
drawn_player = display.create_oval((player.location[0] - (player.size / 2)), (player.location[1] - (player.size / 2)),
(player.location[0] + (player.size / 2)), (player.location[1] + (player.size / 2)),
fill=player.color)
window.bind_all("<Key>", lambda event: movement(event, mover=player))
window.mainloop()
Теперь пока ошибок нет, круг не двигается. Что не так?