Я пытаюсь сделать возможным, чтобы пользователь моей программы перетаскивал изображение из виджета и отбрасывал его в другой, не удаляя изображение с первого должность.Отличительные образы «Перетаскивание» в Tkinter (Python 3.x)
Я подумал об использовании TopLevel
. При нажатии + перетащить событие, TopLevel
, содержащее то же изображение, появится прямо над щелчком на event.x
и event.y
. Затем он изменит свое положение вместе с мышью и только после ButtonRelease-1
будет уничтожен TopLevel
.
Если событие Кнопки фиксатора было вызвано на мастер х и у координаты, соответствующая где мой другой виджет (в случае, холст), то это вызовет canvas.create_image()
с использованием event.x
и event.y
.
Проблемы я сталкиваюсь являются:
только 1
TopLevel
должен появиться сразу, но я не имел никакого успеха ограничивающее его. Несколько окон перекрываются, когда я нажимаю и перетаскиваю мышь.Я не могу сделать
Toplevel.geometry
использовать позиции x и y связанного события.Как сделать
Toplevel
отображать то же изображение, что и пользователь, нажав без магических чисел и переменных?
Вот мой код до сих пор:
class animalImgList():
def __init__(self, a):
#Constructor
initX = 75
initY = 40
animalList = ['pig2.jpg', 'pig3.jpg', 'pig4.jpg']
for a in animalList:
vars(self)[a+'img'] = PIL.Image.open(a)
vars(self)[a+'tkimg'] = PIL.ImageTk.PhotoImage(vars(self)[a+'img'])
vars(self)[a+'labelName'] = Label(anmlCanvas, image=vars(self)[a+'tkimg'])
vars(self)[a+'canvasImg'] = anmlCanvas.create_image(initX, initY,image=(vars(self)[a+'tkimg']))
initY = initY + 70
anmlImgList = []
anmlImgList.append(vars(self)[a+'canvasImg'])
imgTags = anmlCanvas.addtag_all("img")
anmlCanvas.tag_bind("img", "<Button-1>", self.createImg)
def createImg(self, event):
newImg = Toplevel(root)
newImg.geometry("50x40"+"+"+ x+"+"+y)
newImgMsg = Message(newImg, text="This is supposed to be an image")
newImgMsg.pack()
newImg.update_idletasks()
newImg.overrideredirect(True)
createImgOpen = True
if createImgOpen == True:
pass