我有一个主窗口 - root
。
在其中,我在顶部有一个主标签图像,然后是下面的一些按钮,当鼠标经过它们时,按钮会更改其图像(动画),但当鼠标完全进入主窗口时,主标签图像会发生变化,并在鼠标离开应用程序时恢复为关闭图像。
这在某种程度上工作得很好。
当我将鼠标从主图像移动到按钮,或从按钮移动到按钮时,程序似乎认为我实际上已经离开,然后重新进入主窗口,但情况显然并非如此。这种故障会导致程序在每次发生这种情况时重新设置主标签的动画(这是经常发生的),从而产生一个难看的 GUI。
我的理论是,按钮之间的空间(1px宽,我不知道它在那里的原因,但我无法让它消失......)实际上被程序读取为不是按钮的一部分主窗口,从而导致此问题。
#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
,也会导致根的每个子对象被绑定(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
关于Python tkinter 主窗口在仍在主窗口内时绑定(bind)鼠标悬停/离开触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31726732/