我试图让我的程序的用户可以从一个小部件中拖动一个图像并将其放到另一个小部件中,而无需从其第一个位置删除图像。
TopLevel
我想为此使用 a 。在单击+拖动事件时,包含相同图像的 a将在and位置TopLevel
上的单击图像正上方弹出。然后它会随着鼠标改变它的位置,只有在它才会被摧毁。event.x
event.y
ButtonRelease-1
TopLevel
如果在主 x 和 y 坐标上触发了 Button Release 事件,该坐标对应于我的其他小部件的位置(在本例中为画布),那么它将触发canvas.create_image()
使用event.x
and 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