在Python中更新tkinter标签
我正在用tkinter给一个Python服务器做一个图形界面,方法是把服务器的根实例传给Tkinter窗口。现在的问题是,如何让标签上的信息保持最新。
比如,服务器有一个用户列表,里面包含了当前登录的用户。对于初始列表,这个操作很简单:
string = ""
for user in self.server.Users:
string += user + "\n"
Label(master, text=string)
但这样做只会更新一次。之后,我该怎么更新这个列表呢?我可以加一个“更新用户”的按钮,但我希望这个列表能够自动更新。
2 个回答
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 参考资料,关于这个 主题。
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)