2009-04-21 104 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的参考信息以获取更多信息。