[英]Python tkinter main window bind mouse over/leave triggering while still inside main window
我有一個主窗口root
。
在其中,我在頂部有一個主標簽圖像,然后在下面有一些按鈕,當鼠標懸停在其上時,這些按鈕會更改其圖像(動畫),但是當鼠標完全進入主窗口並返回到鼠標離開應用程序時關閉圖像。
這一點工作得很好。
當我將鼠標從主圖像移至按鈕,或從按鈕移至按鈕時,程序似乎認為我已經離開了,然后重新進入主窗口,顯然情況並非如此。 此故障會導致程序在每次發生時(經常)重新對主標簽進行動畫處理,從而產生難看的gui。
我的理論是,按鈕之間的空間(idk寬1像素,這是什么原因,但我無法消除它……)實際上是程序讀取的,因為它不是主窗口的一部分,從而導致此問題。
#Python 3.4.3 on Win7 x64
def startApp (): #initializes crucial tkinter gui components
global root
root = Tk()
root.configure(bg="white")
root.resizable(width=FALSE, height=FALSE)
#******
root.bind ("<Enter>", turnMainImageOn1)
root.bind("<Leave>", turnMainImageOff)
#******
drawMainWindow()
root.mainloop()
主標簽圖像定義:
mainImageOff = PhotoImage(file="Resources/Main/mainImageOff.png") #main window logo image
mainImageLabel = Label(root, image=mainImageOff, bd=0, bg="white")
mainImageLabel.image = mainImageOff
mainImageLabel.pack(side=TOP)
然后動畫會自己起作用:
def turnMainImageOn1 (event): #main image on animation frame 1
mainImageOn1 = PhotoImage(file="Resources/Main/mainImageOn_1.png")
mainImageLabel.configure(image=mainImageOn1)
mainImageLabel.image = mainImageOn1
root.after(17, turnMainImageOn2)
def turnMainImageOn2 (): #main image on animation frame 2
mainImageOn2 = PhotoImage(file="Resources/Main/mainImageOn_2.png")
mainImageLabel.configure(image=mainImageOn2)
mainImageLabel.image = mainImageOn2
root.after(17, turnMainImageOn3)
def turnMainImageOn3 (): #main image on animation frame 3
mainImageOn3 = PhotoImage(file="Resources/Main/mainImageOn_3.png")
mainImageLabel.configure(image=mainImageOn3)
mainImageLabel.image = mainImageOn3
def turnMainImageOff (event): #sets main image to off
mainImageOff = PhotoImage(file="Resources/Main/mainImageOff.png")
mainImageLabel.configure(image=mainImageOff)
mainImageLabel.image = mainImageOff
我是編程的新手,所以請忍受:)
看起來像在根頂級對象上調用bind
,也使根的每個子對象都被綁定。 因此,只要光標離開任何窗口小部件,而不僅僅是主窗口,都將觸發turnMainImageOff
。
一種可能的解決方案是檢查事件對象,以確定哪個窗口小部件觸發了事件。 然后,您可以為根以外的任何小部件提前返回。
def turnMainImageOn1 (event):
if event.widget != root:
return
#rest of function goes here
#...
def turnMainImageOff (event): #sets main image to off
if event.widget != root:
return
#rest of function goes here
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.