Как отобразить объекты на 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
→ Ссылка