# Z miško "vlečemo" (dragging) element po Canvasu
import tkinter

class Figura():
    r = 30 # polmer figure

    def __init__(self, canvas, x, y):
        self.canvas = canvas
        self.id1 = self.canvas.create_oval(x-Figura.r, y-Figura.r,
                                          x+Figura.r, y+Figura.r,
                                           fill="red")
        self.id2 = self.canvas.create_oval(x-5, y-5,
                                           x+5, y+5,
                                           fill="blue")

    def __str__(self):
        return str(self.id1)

    def so_kliknili_name(self, widgeti):
        return (self.id1 in widgeti or self.id2 in widgeti)

    def premakni(self, x, y):
        self.canvas.coords(self.id1,
                           x-Figura.r, y-Figura.r,
                           x+Figura.r, y+Figura.r)
        self.canvas.coords(self.id2,
                           x-5, y-5,
                           x+5, y+5)

class Plosca():
    def __init__(self, master):
        self.canvas = tkinter.Canvas(master, width=300, height=300)
        self.canvas.pack()
        # Narišemo nekaj črt
        for i in range(10):
            self.canvas.create_line(0, 0, Figura.r * i, 300)
        # Postavimo figure
        self.figure = [Figura(self.canvas, i * (5 + Figura.r), 5 + Figura.r) for i in range(5)]
        self.canvas.bind("<ButtonPress-1>", self.gumb_dol)
        self.canvas.bind("<ButtonRelease-1>", self.gumb_gor)
        self.canvas.bind("<Motion>", self.premik_miske)
        self.premikamo = None # Katero figuro trenutno premikamo

    def gumb_dol(self, event):
        (x,y) = (event.x, event.y)
        # Vsi widgeti, ki so blizu miške
        widgets = self.canvas.find_overlapping(x-3,y-3,x+3,y+3)
        # Vse figure, ki so blizu miške
        figure = [figura for figura in self.figure if figura.so_kliknili_name(widgets)]
        if len(figure) > 0:
            # Gremo premikat prvo figuro, od tistih, ki smo jih našli
            self.premikamo = figure[0]

    def gumb_gor(self, event):
        # Odnaročimo se od premikov miške
        self.premikamo = None

    def premik_miske(self, event):
        if self.premikamo is not None:
            x = event.x
            y = event.y
            self.premikamo.premakni(x, y)

# Glavni program
root = tkinter.Tk()
app = Plosca(root)
root.mainloop()
