5

我一直在尝试获得一个鼠标悬停事件来更改 Tkinter 中一个按钮小部件的背景颜色。我在网上得到了一些适用于文本的简单代码,但对颜色无效。这里是:

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()

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

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

谁能告诉我发生了什么?

谢谢。

4

3 回答 3

3

首先,我想这是第 2 行的错字,应该是root = Tk()


该程序对我来说可以正常工作,除了将鼠标从按钮上移开时背景保持不变的行为red。可以通过稍微修改leaveB函数来改变如下:

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

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

于 2012-11-18T13:04:35.113 回答
2

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

所以我所做的是:

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

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

于 2013-02-18T17:20:55.720 回答
0

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

于 2014-02-07T00:07:03.750 回答