2012-11-17 64 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。