Я создаю графический интерфейс для проекта, и мой руководитель попросил включить индикатор выполнения, так как каждая итерация программы может занять до 7 минут.Закрытие всплывающего окна Tkinter автоматически без закрытия главного окна
Я хочу, чтобы индикатор выполнения появлялся в отдельном окне и закрывался после завершения процесса, но с моим нынешним пониманием либо я должен закрыть всплывающее окно вручную, либо весь графический интерфейс закрывается сразу.
Это упрощенная версия коды я использую
import Tkinter as tk
from ttk import Progressbar
from os import listdir
import threading
import time
root = tk.Tk()
root.title("TCC Image Processing")
def create_tcc(input_bar, input_progress_dialog):
input_bar['maximum'] = 5
input_bar['value'] = 0
for x in range(5):
time.sleep(1)
input_bar['value'] += 1
# this line is where the touble seems to be
input_progress_dialog.destroy()
def run_tcc():
progress_dialog = tk.Toplevel()
progress_dialog.title("TCC Processing")
bar = Progressbar(progress_dialog, orient="horizontal", length=500, value=0, mode="determinate")
bar.grid(row=4, columnspan=2)
t = threading.Thread(target=create_tcc, args=(bar, progress_dialog))
t.start()
tcc_run_button = tk.Button(root, text="RUN", command=lambda:run_tcc())
tcc_run_button.pack()
root.mainloop()
Если возможно, я хотел бы избежать загрузок дополнительных модулей, которые не приходят с прямым питона.
Кроме того, сходство имен глобальных 'root',' run_tcc.root2' и 'create_tcc.root' запутывает. Поскольку ни одна из локальных переменных на самом деле не ссылается на основное окно приложения, возможно, выберете другое имя переменной, например 'progress_dialog'? –
Ваш код в его отредактированной форме отлично работает для меня. Какая проблема у вас сейчас? –
Приведенный выше код запускается, и когда я нажимаю кнопку, появляется всплывающее окно с индикатором выполнения. Бар работает четыре раза, а затем останавливается, когда он должен ступить пять раз. Единственный раз, когда он шагнул пять раз с текущей версией кода, с которым программа врезалась, и появилось новое всплывающее окно, в котором говорилось о проблеме. – cforeman