Canvas в цикле for
Честно, даже не знаю как задать вопрос, но суть такова, при переборке массива с шариками Canvas в цикле for, i принимает значение int, почему? Нигде не смог найти почему так, хотя при получении координат он спокойно работает. Мне нужно поменять цвет при ударе об стенку, но указывая configure выдает ошибку о том что это целое число и не имеет такого метода
from tkinter import *
from random import randrange, choices
import sys
sys.setrecursionlimit(10**6)
window = Tk()
window.geometry("600x600")
canvas = Canvas(width=600, height=600, bg='white')
canvas.pack()
color = ['red', 'blue', 'green', 'yellow']
ball = [[canvas.create_oval(0, 0, 50, 50, fill="red"), [randrange(1, 10), randrange(1, 10)]],
[canvas.create_oval(0, 0, 50, 50, fill="red"), [randrange(1, 10), randrange(1, 10)]],
[canvas.create_oval(0, 0, 50, 50, fill="red"), [randrange(1, 10), randrange(1, 10)]],
[canvas.create_oval(0, 0, 50, 50, fill="red"), [randrange(1, 10), randrange(1, 10)]],
[canvas.create_oval(0, 0, 50, 50, fill="red"), [randrange(1, 10), randrange(1, 10)]],
[canvas.create_oval(0, 0, 50, 50, fill="red"), [randrange(1, 10), randrange(1, 10)]],
[canvas.create_oval(0, 0, 50, 50, fill="red"), [randrange(1, 10), randrange(1, 10)]],
[canvas.create_oval(0, 0, 50, 50, fill="red"), [randrange(1, 10), randrange(1, 10)]],
[canvas.create_oval(0, 0, 50, 50, fill="red"), [randrange(1, 10), randrange(1, 10)]],
[canvas.create_oval(0, 0, 50, 50, fill="red"), [randrange(1, 10), randrange(1, 10)]],
[canvas.create_oval(0, 0, 50, 50, fill="red"), [randrange(1, 10), randrange(1, 10)]],
[canvas.create_oval(0, 0, 50, 50, fill="red"), [randrange(1, 10), randrange(1, 10)]],
[canvas.create_oval(0, 0, 50, 50, fill="red"), [randrange(1, 10), randrange(1, 10)]]]
def move():
for i in ball:
canvas.move(i[0], i[1][0], i[1][1])
if canvas.coords(i[0])[0] <= 0 or canvas.coords(i[0])[2] >= 600:
i[0].configure(fill=choices(color, k=1))
i[1][0] *= -1
if canvas.coords(i[0])[1] <= 0 or canvas.coords(i[0])[3] >= 600:
i[0].configure(fill=choices(color, k=1))
i[1][1] *= -1
canvas.after(25, move)
move()
window.mainloop()
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Всё правильно говорит.
i[0] - номер объекта на конкретном canvas, число, а у числа нет метода переконфига.
Должно быть примерно так:
canvas.itemconfig(i[0], fill=choices(color, k=1)))