Обновление меток tkinter в python
Вопрос
Я работаю над предоставлением серверу Python графического интерфейса с tkinter, передавая корневой экземпляр сервера в окно Tkinter.Проблема в том, чтобы поддерживать информацию на этикетках в актуальном состоянии.
Например, на сервере есть список пользователей, содержащий пользователей, вошедших в систему.Это достаточно просто сделать для начального списка:
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)
Другие советы
Вы меняете текст 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 об этом тема Чтобы получить больше информации.