2009-04-21 107 views
2

我正在通過將服務器的根實例傳遞給Tkinter窗口來爲python服務器提供tkinter的GUI。問題在於保持標籤中的信息是最新的。在python中更新tkinter標籤

例如,服務器有一個用戶列表,其中包含已登錄的用戶。這很容易做到這一點的初始名單:

string = "" 
for user in self.server.Users: 
    string += user + "\n" 

Label(master, text=string) 

但那隻會做一次。之後,我該如何更新清單?我可以添加'更新用戶'按鈕,但我需要列表自我更新。

回答

3

您可以在服務器實例上使用回調。每當用戶列表更改時,安裝一個更新標籤的回調。

如果您無法更改服務器代碼,則需要每隔幾秒輪詢一次列表以獲取更新。您可以使用Tkinter事件系統來跟蹤更新。

def user_updater(self): 
    self.user_updater_id = self.user_label.after(1000, self.user_updater) 
    lines = [] 
    for user in self.server.Users: 
     lines.append(user) 
    self.user_label["text"] = "\n".join(lines) 

def stop_user_updater(self): 
    self.user_label.after_cancel(self.user_updater_id) 
2

可以通過設置相應的StringVar對象的文本,例如更改Label全文:

from tkinter import * 

root = Tk() 
string = StringVar() 
lab = Label(root, textvariable=string) 
lab.pack() 
string.set('Changing the text displayed in the Label') 
root.mainloop() 

注意使用set功能的改變標籤lab的顯示文本。

請參閱New Mexico Tech Tkinter關於此topic的參考信息以獲取更多信息。