【问题标题】:Updating tkinter labels in python在 python 中更新 tkinter 标签
【发布时间】:2015-03-13 21:20:35
【问题描述】:

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

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

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

Label(master, text=string)

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

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    您可以在服务器实例上使用回调。安装一个回调,在用户列表更改时更新标签。

    如果您无法更改服务器代码,则需要每隔几秒轮询一次列表以获取更新。您可以使用 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)
    

    【讨论】:

      【解决方案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 参考关于此topic。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-11
        • 1970-01-01
        • 2017-04-12
        相关资源
        最近更新 更多