2017-06-01 143 views
0

我有一個顯示我的db連接狀態的標籤。我需要在發生任何事情時更新此標籤的文本,但我也想更改此標籤的顏色。我使用update_idletasks()方法,但它只是改變文本而不是顏色。Python tkinter - 動態更改標籤字體顏色

self.dtbase_value = StringVar() 
    self.dtbase_color = StringVar() 
    self.dtbase_bg = StringVar() 

    self.dtbaselbl = Label(self.right_frame, textvariable = self.dtbase_value, fg = self.dtbase_color.get(), bg = self.dtbase_bg.get()).pack(side=TOP) 

這是我稱之爲更新的部分。

self.dtbase_value.set(self.get_current_time() + ': connection established') 
    self.dtbase_color.set('SpringGreen') 
    root.update_idletasks() 

是否有任何特定的方法來dinamically更新Label組件的屬性?

+0

我** **想你需要在這裏卸下支架'FG = self.dtbase_color.get(),BG = self.dtbase_bg.get()' – Nullman

+0

我想你想['trace' ](http://effbot.org/tkinterbook/variable.htm)更改並調用回調函數以更改您的標籤(現在爲「無」)的出現。 – CommonSense

回答

1

首先,您需要獲取對Label對象的引用。你可能會想:「我已經有一個,它是self.dtbaselbl」。但是這個價值實際上是無。您將Label().pack()的結果分配給它,並且pack始終返回無。有關更多信息,請參見Why do my Tkinter widgets get stored as None?

包,並分配在不同的線路:

self.dtbaselbl = Label(self.right_frame, textvariable = self.dtbase_value) 
self.dtbaselbl.pack(side=TOP) 

現在,你有一個適當的參考,您可以使用.config方法設置標籤的配置選項,包括顏色,在任何時間。

self.dtbase_value.set(self.get_current_time() + ': connection established') 
self.dtbaselbl.config(fg="SpringGreen") 
root.update_idletasks() 
+0

感謝凱文。有效。我正在嘗試使用'.config',但直到我對包進行調整後才工作。 – heliosk