Обновление ярлыков tkinter в python - PullRequest
2 голосов
/ 21 апреля 2009

Я работаю над тем, чтобы предоставить питон-серверу графический интерфейс с помощью tkinter, передав корневой экземпляр сервера в окно Tkinter. Проблема в том, что информация на этикетках обновляется.

Например, на сервере есть список пользователей, содержащий пользователей, которые вошли в систему. Это достаточно просто сделать для начального списка:

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

Label(master, text=string)

Но это будет сделано только один раз. После этого как мне обновить список? Я мог бы добавить кнопку «обновить пользователей», но мне нужно, чтобы список обновлялся автоматически.

Ответы [ 2 ]

3 голосов
/ 21 апреля 2009

Вы можете использовать обратные вызовы на экземпляре сервера. Установите обратный вызов, который обновляет метку при каждом изменении списка пользователей.

Если вы не можете изменить код сервера, вам нужно будет опросить список обновлений каждые несколько секунд. Вы можете использовать систему событий 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 голосов
/ 26 апреля 2009

Вы изменяете текст 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 об этой теме .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...