我正在通过将服务器的根实例传递给Tkinter窗口,为python服务器提供一个带有tkinter的GUI。问题在于使标签中的信息保持最新。
例如,服务器有一个Users列表,其中包含登录的用户。对于初始列表来说这很简单:
string = ""
for user in self.server.Users:
string += user + "\n"
Label(master, text=string)
但那只会做一次。之后,我该如何更新列表?我可以添加“更新用户”按钮,但我需要列表自我更新。
答案 0 :(得分: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)
答案 1 :(得分:2)
您可以通过设置相应Label
对象的文字来更改StringVar
的文字,例如:
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的参考信息。