【发布时间】:2013-06-29 01:52:44
【问题描述】:
我试图让我的程序的用户可以从一个小部件中拖动一个图像并将其放到另一个小部件中,而不会将图像从其第一个位置移除。
我想为此使用TopLevel。在单击+拖动事件时,包含相同图像的TopLevel 将在event.x 和event.y 位置上的单击图像正上方弹出。然后它会随着鼠标改变它的位置,只有在ButtonRelease-1 时TopLevel 才会被销毁。
如果在主 x 和 y 坐标上触发了 Button Release 事件,对应于我的其他小部件(在本例中为画布)的位置,那么它将使用 event.x 和 event.y 触发 canvas.create_image() .
我面临的问题是:
一次只能出现 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
【问题讨论】:
标签: python events binding tkinter python-3.3