#python #tkinter
#python #tkinter
Вопрос:
Я использую графический интерфейс Tkinter для запуска процесса измерения и анализа, который в основном запускается нажатием кнопки. Поскольку эти измерения могут занять некоторое время, я попытался включить индикатор выполнения, а именно этот:
http://tkinter.unpythonic.net/wiki/ProgressMeter
Но когда я запускаю процесс, все мое окно Tkinter превращается в бессмыслицу, пока не будет выполнено измерение, и оно как бы перезагружается, а мой индикатор выполнения установлен слишком на 100%. Это не то, чего я хотел.
Что там произошло? Я довольно новичок во всем этом программировании, поэтому у меня нет всех инструментов, которые я предполагаю. Нужно ли мне вводить отдельный поток или что-то в этом роде, чтобы измерение и основной цикл tkinter (это что такое?) запускаться одновременно? Если да, то как мне это сделать?
Ответ №1:
Создайте панель прогресса (это фрагменты из моего кода, который обрабатывает файл размером 67 МБ.)
progress = ttk.Progressbar(bottommenuframe, orient=HORIZONTAL, length=100, maximum=190073, mode='determinate')
progress.pack(side=RIGHT)
progress.start() ## this starts the progressbar
затем во время вашего анализа:
def analysisfunction():
progress.step(1)
##do some analysis
root.after(0, analysisFunction)
if job == complete:
stop
Как я уже сказал, это будет работать с моим файлом 67 МБ и tkinter.
Надеюсь, это немного поможет 🙂
Ответ №2:
вызывайте widget.update()
/ root_window.update()
каждый раз, когда вы обновляете индикатор выполнения
Комментарии:
1. Вызов Update опасен (не столько опасен, сколько может привести к непреднамеренным побочным эффектам). Как правило, если вы не знаете, почему это сложно, вам не следует его вызывать. Обычно
update_idletasks
это лучший выбор.