簡體   English   中英

Python Tkinter主窗口仍在主窗口內時綁定鼠標懸停/離開觸發

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM