在python中更新tkinter标签
问题描述:
我正在通过将服务器的根实例传递给Tkinter窗口来为python服务器提供tkinter的GUI。问题在于保持标签中的信息是最新的。在python中更新tkinter标签
例如,服务器有一个用户列表,其中包含已登录的用户。这很容易做到这一点的初始名单:
string = ""
for user in self.server.Users:
string += user + "\n"
Label(master, text=string)
但那只会做一次。之后,我该如何更新清单?我可以添加'更新用户'按钮,但我需要列表自我更新。
答
您可以在服务器实例上使用回调。每当用户列表更改时,安装一个更新标签的回调。
如果您无法更改服务器代码,则需要每隔几秒轮询一次列表以获取更新。您可以使用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)
答
可以通过设置相应的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的参考信息以获取更多信息。