在python中更新tkinter标签

时间:2009-04-21 17:54:18

标签: python tkinter

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

例如,服务器有一个Users列表,其中包含登录的用户。对于初始列表来说这很简单:

string = ""
for user in self.server.Users:
  string += user + "\n"

Label(master, text=string)

但那只会做一次。之后,我该如何更新列表?我可以添加“更新用户”按钮,但我需要列表自我更新。

2 个答案:

答案 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的参考信息。