Обновление графического интерфейса после mainloop () - PullRequest
0 голосов
/ 27 февраля 2019

Я понимаю, что в tkinter после запуска mainloop () не будет кода после его запуска, пока окно не будет уничтожено.Я обнаружил, что общим решением является использование tk.after для повторного вызова функции через определенные промежутки времени.Однако я использую цикл for, и каждый раз, когда он зацикливается, он обновляет переменную, которую я хочу видеть изменения в графическом интерфейсе.

PB=myProgressBar()
for i in range (0, len(dataset)):
    performfunction
    PB.update(i)
PB.quit()

Цель состоит в том, чтобы выполнить операцию над каждым элементом в наборе данных,GUI покажет, насколько далеко программа.

В своем классе индикатора выполнения я попытался использовать tk.IntVar в качестве значения ttk.ProgressBar и установить значение с помощью PB.update (i) для его обновления.,Я также попытался использовать ProgressBar ['value'] = i в моем методе обновления класса индикатора выполнения.В обоих случаях, если я запускаю mainloop () перед циклом, цикл for не запускается (как и следовало ожидать), но я не уверен, как запустить mainloop и получить обновление графического интерфейса без грязной функции tk.after, котораявероятно, придется задействовать значение self.i (а затем сделать self.i + = 1 в конце функции, которая заменяет цикл).Есть ли чистый «питонический» способ сделать это?

...