2

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

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

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

Label(master, text=string)

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

4

2 回答 2

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)
于 2009-04-21T18:06:49.567 回答
2

Label您可以通过设置其对应对象的文本来更改 a的文本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函数更改 Label 的显示文本lab

有关更多信息,请参阅有关此主题New Mexico Tech的Tkinter 参考。

于 2009-04-26T07:35:22.323 回答