在Python中更新tkinter标签

2 投票
2 回答
7399 浏览
提问于 2025-04-15 11:12

我正在用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)

撰写回答