Как отобразить объекты на canvas?
Идея программы заключается в том, что, нажимая мышкой по изображению, появляются точки в месте нажатия. После очередного нажатия объект Point аппендится в объект Path, хранящий как раз все эти точки. Как можно отобразить на canvas точки из объекта path?
from tkinter import *
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
self.radius = 1.5
def draw(self):
canvas.create_oval(self.x - self.radius, self.y - self.radius, self.x + self.radius, self.y + self.radius, outline="#A5A34F")
# def show(self):
# print("[{}, {}]".format(self.x, self.y))
class Path:
def __init__(self):
self.vertexes = []
def append(self, point):
self.vertexes.append(point)
def draw(self):
for vertex in self.vertexes:
vertex.draw()
# def show(self):
# for vertex in self.vertexes:
# vertex.show()
def on_mouse_left_click(event):
path.append(Point(event.x, event.y))
def on_mouse_right_click(event):
print(event)
root = Tk()
# canvas
canvas = Canvas(width=600, height=600, bg='#323232')
canvas.pack()
img = PhotoImage(file="D:\\Progs\\WebProgs\\FurierTest\\images\\nut.png")
canvas.create_image(0, 0, image=img, anchor=NW)
# events
canvas.bind("<Button-1>", on_mouse_left_click)
canvas.bind("<Button-3>", on_mouse_right_click)
if __name__ == '__main__':
path = Path()
root.mainloop()
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Если нужно, чтобы круги отображались при каждом клике, можно прямо при добавлении объекта вызывать его метод draw:
def on_mouse_left_click(event):
path.append(Point(event.x, event.y))
path[-1].draw() # У последнего объекта в списке вызвать метод draw