Вместо использования tqdm я бы хотел использовать ttk.Progressbar< /code>, но все попытки, которые я предпринимал, блокируют задачи при попытке обновить индикатор выполнения (например, с помощью update_idletasks и тому подобного). Ниже приведен шаблон решения, которое я ищу:
Код: Выделить всё
import time
from multiprocessing import Pool
from tqdm import tqdm
import tkinter as tk
import tkinter.ttk as ttk
def task(x):
time.sleep(0.1)
return x * x
def start_task():
num_processes = 12
num_tasks = 100
with Pool(processes=num_processes) as pool:
with tqdm(total=num_tasks, desc="Processing") as pbar:
def update_progress(_):
#
pbar.update(1)
for i in range(num_tasks):
pool.apply_async(task, args=(i,), callback=update_progress)
pool.close()
pool.join()
if __name__ == "__main__":
root = tk.Tk()
root.title("Task Progress")
progress_bar = ttk.Progressbar(root, maximum=100, length=300)
progress_bar.pack(pady=20)
button = tk.Button(text="Start", command=start_task)
button.pack(fill="x", padx=10, pady=10)
root.mainloop()
Если другая многопроцессорная структура будет работать лучше, пожалуйста, не стесняйтесь вносить изменения (пул показался самым простым для демонстрации).
Этот вопрос уже задавался при переполнении стека, но все предыдущие ответы Я обнаружил, что примеров не так уж и мало, и они не кажутся мне очень полезными.
Подробнее здесь: https://stackoverflow.com/questions/793 ... al-example