2012-11-17 65 views
3

我一直试图让一个鼠标移动事件来改变Tkinter中的一个butten widget的背景颜色。我在网上获得了一些简单的代码,它可以用于文本,但是颜色失败。这里是:奇怪的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',并使其余部分保持不变,则该按钮将使该按钮保持蓝色,并且它永远不会变为红色。

谁能告诉我发生了什么事?

谢谢。

+0

好问题。我不想冒犯你,但你应该想,如果你真的想学习一个仅仅是传统的UI工具包(来源:http://wiki.python.org/moin/TkInter,也许你可以找到还有一些有用的资源)。 – phineas

+0

对不起,但我不确定我是否得到你。你是说没有理由将Tkinter用于Python历史的一次美好旅程之外?这没有用?感谢您的链接。我经常使用该页面。 – bev

+1

*在我看来* Tkinter有点过时,只能一眼就看到(就像你已经过期)一样容易编程,最后但并非最不重要的是它看起来不太好。有像''wxPython'](http://wxpython.org/),['PyQt'](http://wiki.python.org/moin/PyQt)和['PyGTK'](https:/ /python-gtk-3-tutorial.readthedocs.org/en/latest/index.html),它们有最新的开发,错误修复,文档,本地外观和感觉,并且功能更强大。我推荐'wxPython'。这些UI工具包的唯一缺点是它们没有与Python解释器一起分发,所以您必须手动安装它们。 – phineas

回答

2

首先,我想这是第2行笔误,应该是root = Tk()


该程序正常工作对我来说,比从按钮移除鼠标后台停留red的行为等。

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

哪里"SystemButtonFace"是默认的按钮表面颜色,如果你使用的是Windows

+0

是的,你是对的,这是一个错字。我经常这样做:-(我会试试你的解决方案,并在今天晚些时候回复你。 – bev

1

我有同样的问题(其实我是用按钮颜色困扰:它可以通过稍微修改leaveB功能如下方法来改变点击后不会改变,除非你用鼠标离开它)。解决方案是设置activebackground颜色。在我的理解,这是它所示,当鼠标移动到按钮的颜色(见http://www.tutorialspoint.com/python/tk_button.htm

所以我所做的就是:

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

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

0

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