Я пытаюсь создать простую программу, в которой вы можете перемещать несколько объектов на холсте в tkinter, перетаскивая их. Для начала я начал с 2 квадратов. Однако я сталкиваюсь с 2 проблемами:
каждый раз, когда я нажимаю на объект, он центрируется на указатель мыши (указатель всегда в середине квадрата). Как я могу перетащить объект по месту щелчка (например, перетащить по углу)?
как только я прохожу один квадрат через другой, второй квадрат остается наверху и больше не может быть отделен. Объекты имеют одинаковые размеры.
Есть ли простые решения для этого? Спасибо за любую помощь или совет.
Мой код:
import tkinter
c = tkinter.Canvas(width = 400, height = 300)
c.pack()
d = 25 #size of square
x, x2 = 100, 200
y, y2 = 100, 200
rect = c.create_rectangle(x-d, y-d, x+d, y+d, fill = 'blue') #first square
rect2 = c.create_rectangle(x2-d, y2-d, x2+d, y2+d, fill = 'red') #second square
def drag(event): #drag by holding mouse button 1
global x, y, x2, y2, xt, yt, x2t, y2t
xt, yt = event.x, event.y #1st square movement coords
x2t, y2t = event.x, event.y #2nd square movement coords
if xt in range(x-d, x+d):
if yt in range(y-d, y+d):
c.coords(rect, xt-d, yt-d, xt+d, yt+d) #coords update of 1st square
x, y = xt, yt
if x2t in range(x2-d, x2+d):
if y2t in range(y2-d, y2+d):
c.coords(rect2, x2t-d, y2t-d, x2t+d, y2t+d) #coords update of 2nd square
x2, y2 = x2t, y2t
c.bind('<B1-Motion>', drag)
tkinter.mainloop()