Допустим, у нас есть три виджета tkinter: метка, древовидная структура и Optionmenu (для краткости ниже будем называть «меню»). Я успешно заставляю меню выполнять функцию после выбора опции. Краткая функция выглядит так:
def data_process():
# do something takes time
def print_data()
data_process() # do something takes time too
# print stuff to treeview
def refresh_table(self, args):
label['text'] = 'Executing' # change label text to Executing
print_data() # a func. which takes time to run
label['text'] = 'Done' # change text to Done
label = tk.Label(parent, text = 'ready')
label.pack()
menu = tk.OptionMenu(parent, var, *list, command = lambda _:refresh_table(self, args))
menu.pack()
table = tk.Treeview(parent)
table.pack()
Функция print_data
собирается что-то напечатать в виджет дерева (таблица). Виджет метки похож на строку состояния, сообщая пользователям, что происходит сейчас. Итак, рабочий процесс, который я пытаюсь сделать:
Выберите опцию в меню и позвоните refresh_table
.
Изменить текст метки на «Выполнение».
Выполнить print_data
и распечатать материал в виде дерева.
Когда print_data
сделано, измените метку на «Готово».
Вот эта вещь. Когда я выбираю опцию, программа запасается (как и ожидалось), чтобы делать вещи. Тем не менее, ярлык не меняется на «Выполнение» в начале. Вместо этого оно изменяется на «Готово», когда print_data
завершается (почти одновременно). Я подозреваю, что команда refresh_table
воздействует на целевые виджеты после выполнения всех требований. Потому что я вижу, что ярлык мигает «Выполнено», но сразу показывает «Готово». Есть какие-нибудь мысли об этой ситуации? Любое предложение приветствуется. Спасибо!