Я пытаюсь создать графический интерфейс tkinter для скрипта, который выполняет какую-то задачу.Задача запускается нажатием кнопки «Пуск», и я хотел бы добавить динамическую метку, показывающую, что задача «выполняется», с отображением: «Работает».→ «Working ..» → «Working ...»
Я сослался на этот пост и написал следующий скрипт.Здесь я использовал индикатор выполнения, чтобы представить свою «задачу», и ожидал, что метка состояния изменится (как указано выше), пока индикатор выполнения обновляется.
import tkinter as tk
class UI:
def __init__(self):
self.root = tk.Tk()
self.root.title('Hello World')
self.prog_Label = tk.Label(self.root, text='Progress')
self.prog_Label.grid(row=0, column=0, sticky=tk.W, padx=20, pady=(10, 0))
self.prog_Bar = tk.ttk.Progressbar(self.root)
self.prog_Bar.configure(value=0, mode='determinate', orient='horizontal')
self.prog_Bar.grid(row=1, column=0, sticky=(tk.W, tk.E, tk.N, tk.S), padx=20, pady=5)
self.exe_Btn = tk.Button(self.root, text='Start', padx=15, command=self.run, relief='groove')
self.exe_Btn.grid(row=2, column=0, padx=80, pady=(40, 20), sticky=tk.E)
self.prog_Label = tk.Label(self.root, text='Status:-')
self.prog_Label.grid(row=3, column=0, sticky=tk.W, padx=20, pady=10)
self.root.mainloop()
def run(self):
self.update_status('Working')
n = 0
self.prog_Bar.configure(value=n, maximum=100000, mode='determinate', orient='horizontal')
for i in range(100000):
n += 1
self.prog_Bar.configure(value=n)
self.prog_Bar.update_idletasks()
def update_status(self, status=None):
if status is not None:
current_status = 'Status: ' + status
else:
current_status = self.prog_Label['text']
if current_status.endswith('...'):
current_status = current_status.replace('...', '')
else:
current_status += '.'
self.prog_Label['text'] = current_status
self.prog_Label.update_idletasks()
self._status = self.root.after(1000, self.update_status)
if __name__ == '__main__':
ui = UI()
Однако программа ведет себя таким образомчто, когда нажимается кнопка «Пуск», хотя метка состояния немедленно меняется с «-» на «Рабочая», она начинает добавлять точки только после того, как индикатор выполнения достигает конца.
Есть ли способ изменить его, чтобы достичь моей цели?