Форум сайта python.su
Создаю объект - многоугольник. Он появляется в окне. Затем к программке добавляю фрагмент, чтобы заставить объект перемещаться в окне. И получаю сообщение об ошибке - Phyton воспринимает объект как “integer”:
in <module>
MKS.move(1, 5, 0)
AttributeError: ‘int’ object has no attribute ‘move’
Программка такая:
import tkinter as tk root = tk.Tk() c= tk.Canvas(root, width=500, height=400, bg='black') c.pack() MKS=c.create_polygon(110, 304, 110, 308, 106, 308, 106, 322, 110, 322, 110, 326,121, 326, 126, 324, 138, 327, 138, 332, 146, 332, 146, 322,138, 332, 138, 324, 131, 322, 142, 318, 142, 312, 128, 307, 128, 302, 134, 302, 134,280, 122, 280, 122, 300, 126, 302, 126, 306, 121, 304, fill='#FFD700', outline='black') #poligon MKS for x in range(0, 60) : MKS.move(1, 5, 0) tk.update() time.sleep(0.05) root.mainloop()
from tkinter import* import time tk= Tk() canvas = Canvas(tk, width=500, height=400, bg='white') canvas.pack() canvas.create_polygon(10, 304, 10, 308, 6, 308, 6, 322, 10, 322, 10, 326,21, 326, 26, 324, 38, 327, 38, 332, 46, 332, 46, 322,38, 332, 38, 324, 31, 322, 42, 318, 42, 312, 28, 307, 28, 302, 34, 302, 34,280, 22, 280, 22, 300, 26, 302, 26, 306, 21, 304, fill='#FFD700', outline='black') for x in range(0, 60) : canvas.move(1, 5, 0) tk.update() time.sleep(0.05) root.mainloop()
Отредактировано Simka (Окт. 28, 2022 17:34:47)
Офлайн
MKS= tk.Canvas(root, width=500, height=400, bg='black') MKS.pack() MKS.create_polygon
Офлайн
Спасибо за быстрый ответ!
Видимо, я нечетко описал ситуацию и ввел вас в заблуждение. Дело в том, что выше в программе ( Я только часть показал) уже создано окно и на нем размещено несколько изображений, с которыми производятся операции по смене цвета, без перемещения. Далее я создаю дополнительный, движущийся объект MKS на том же окне.
Возможно, я ошибаюсь, но скорее всего строкой MKS= tk.Canvas(root, width=500, height=400, bg='black') я удалю прежнее окно?
Вот такой у меня сейчас код:
......... c=Canvas(root, width=500, height=400, bg='black') c.pack() ......... disk=c.create_oval(180, ...... Hole=c.create_oval(190, ...... tk.update() #оператор смены картинки time.sleep(2.0) c.itemconfig(disk,outline='#000080') #смена цвета диска tk.update() time.sleep(2.0) c.itemconfig(disk,outline='#0000CD') #смена цвета диска tk.update() #оператор смены картинки time.sleep(2.0) ....... tk.update() time.sleep(2.0) c.itemconfig(disk,outline='#63B8FF') #смена цвета диска c.create_polygon(110, 304 ..... for x in range(0, 60) : c.move(1, 5, 0) tk.update() time.sleep(0.05) root.mainloop()
Отредактировано Simka (Окт. 28, 2022 17:42:49)
Офлайн
SimkaMKS — это не сам объект, а его идентификатор. В метод .move() нужно передавать первым параметром идентификатор нужного объекта (в данном случае MKS), а не 1
Создаю объект - многоугольник
import tkinter as tk import time root = tk.Tk() c = tk.Canvas(root, width=500, height=400, bg='black') c.pack() MKS = c.create_polygon(110, 304, 110, 308, 106, 308, 106, 322, 110, 322, 110, 326,121, 326, 126, 324, 138, 327, 138, 332, 146, 332, 146, 322,138, 332, 138, 324, 131, 322, 142, 318, 142, 312, 128, 307, 128, 302, 134, 302, 134,280, 122, 280, 122, 300, 126, 302, 126, 306, 121, 304, fill='#FFD700', outline='black') #poligon MKS for x in range(0, 60) : c.move(MKS, 5, 0) root.update() time.sleep(0.05) root.mainloop()
Офлайн
ramiБольшое СПАСИБО! Я понял свою оплошность! Это ошибка из-за моей невнимательности! “1” - это идентификатор, присвоенный IDLE первому созданному программой объекту! Поэтому у меня и двигается не MKS, нарисованная последней, а первая размещенная на “небе” точка - “звездочка”. Буду исправлять.
MKS — это не сам объект, а его идентификатор.
Отредактировано Simka (Окт. 28, 2022 19:42:03)
Офлайн