Мой графический интерфейс Tkinter слишком … статичен?

#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 это лучший выбор.