我試圖讓我的程序的用戶可以從一個窗口小部件拖動一個圖像並將其放入另一個圖像,而不從第一個圖像中移除圖像位置。Tkinter中的一個不同的「拖放」圖像(Python 3.x)
我想爲此使用TopLevel
。在點擊+拖動事件後,包含相同圖像的TopLevel
將在event.x
和event.y
位置的點擊圖像上方彈出。然後它會隨着鼠標改變其位置,並且只有當ButtonRelease-1
TopLevel
將被銷燬。
如果按鈕釋放事件在主x和相應的地方是我的其他部件(的情況下,畫布)y座標觸發,那麼它會使用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