Вопрос

Я работаю над предоставлением серверу 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 об этом тема Чтобы получить больше информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top