奇怪的Tkinter鼠标悬停行为

时间:2012-11-17 04:06:15

标签: python tkinter

我一直在尝试使用鼠标悬停事件来更改Tkinter中的butten小部件的背景颜色。我在网上得到了一些简单的代码,适用于文本,但颜色不合适。这是:

from Tkinter import *
root - Tk()

b = Button(root, text='foo')
b.pack()

def enterB(event):
    b.configure(text='bar', background='red')

def leaveB(event):
    b.configure(text='foo')

b.bind('<Enter>', enterB)
b.bind('<Leave>', leaveB)

root.mainloop()

当我将鼠标放在按钮上时,文本会变为“bar”,但背景颜色会保持灰色。当我的鼠标离开按钮上方的区域时,背景颜色变为红色,文本变为“foo”。这与应该发生的事情相反。

如果我在leaveB函数的b.configure语句中添加background ='blue',其余部分保持不变,则保留按钮会使按钮保持蓝色,并且它永远不会是红色。

谁能告诉我发生了什么?

感谢。

3 个答案:

答案 0 :(得分:3)

首先,我猜这是第2行的拼写错误,它应该是root = Tk()


该程序适用于我,除了从按钮上移除鼠标后,背景保持red的行为。可以通过稍微修改leaveB函数来更改,如下所示:

def leaveB(event):
    b.configure(text="foo", background="SystemButtonFace")

如果您在Windows上,"SystemButtonFace"是默认按钮面部颜色

答案 1 :(得分:1)

我遇到了同样的问题(实际上,除非你用鼠标离开它,否则点击后按钮颜色不会改变,我会感到困扰)。解决方案是设置activebackground颜色。在我的理解中,这是当鼠标悬停在按钮上时显示的颜色(参见http://www.tutorialspoint.com/python/tk_button.htm

所以我做的是:

def enterB(event):
   b.configure(text='bar', background='red')
   b.configure(activebackground='red');

这样,当鼠标悬停在按钮上时,按钮已经变为红色。当然,您必须重置leaveB函数中的颜色,以便在您离开按钮后将其更改为灰色。

答案 2 :(得分:0)

如果您使用的是Mac,则无法更改按钮的背景颜色或浮雕样式。但是,您可以更改高亮背景颜色。这是对mac的tk的限制,因此我建议使用wx。

相关问题