在python中更新tkinter标签

在python中更新tkinter标签,python,tkinter,Python,Tkinter,我正在通过将服务器的根实例传递到tkinter窗口,为python服务器提供一个带有tkinter的GUI。问题在于使标签中的信息保持最新 例如,服务器有一个用户列表,其中包含已登录的用户。对初始列表执行此操作非常简单: string = "" for user in self.server.Users: string += user + "\n" Label(master, text=string) 但这只能做到一次。之后,我该如何更新列表?我可以添加一个“更新用户”按钮,但我需要对列

我正在通过将服务器的根实例传递到tkinter窗口,为python服务器提供一个带有tkinter的GUI。问题在于使标签中的信息保持最新

例如,服务器有一个用户列表,其中包含已登录的用户。对初始列表执行此操作非常简单:

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
对象的文本,可以更改
标签的文本,例如:

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
的显示文本

有关更多信息,请参阅《新墨西哥州技术规范》
Tkinter参考资料