Создание функционального индикатора прогресса (Progress Bar) с использованием библиотеки Tkinter довольно просто. Для решения вашей проблемы с парсером, который может блокировать интерфейс, нужно использовать многопоточность или асинхронное программирование, чтобы процесс парсинга выполнялся в фоновом потоке. Это позволит интерфейсу оставаться отзывчивым, и прогресс-бар будет обновляться по мере завершения обработки страниц.
Вот пример, как можно создать такой прогресс-бар и реализовать его в вашем парсере. Мы будем использовать библиотеку `threading` для многопоточности:
```python
import tkinter as tk
from tkinter import ttk
import threading
import time # Для симуляции времени обработки страниц
# Функция для парсинга страниц
def parse_pages(total_pages, progress_var):
for i in range(total_pages):
time.sleep(1) # Симуляция времени обработки каждой страницы
progress_var.set((i + 1) / total_pages * 100) # Обновляем прогресс
print("Парсинг завершен!")
# Функция для запуска парсинга в отдельном потоке
def start_parsing(progress_var):
total_pages = 10 # Общее количество страниц для парсинга
threading.Thread(target=parse_pages, args=(total_pages, progress_var), daemon=True).start()
# Основной GUI
def main():
root = tk.Tk()
root.title("Парсер с индикатором прогресса")
# Создание прогресс-бара
progress_var = tk.DoubleVar()
progress_bar = ttk.Progressbar(root, variable=progress_var, maximum=100)
progress_bar.pack(pady=20)
# Кнопка для запуска парсинга
start_button = tk.Button(root, text="Начать парсинг", command=lambda: start_parsing(progress_var))
start_button.pack(pady=10)
# Запуск основного цикла
root.mainloop()
if __name__ == "__main__":
main()
```
### Пояснения:
1. **Импортирование библиотек**: Мы импортируем необходимые модули `tkinter`, `ttk`, `threading` и `time`.
2. **Функция `parse_pages`**: Здесь происходит имитация парсинга страниц. Вместо реального парсинга, мы используем `time.sleep()` для симуляции задержки.
3. **Функция `start_parsing`**: Эта функция запускает `parse_pages` в отдельном потоке, чтобы не блокировать GUI.
4. **Основной GUI**: Мы создаем окно с прогресс-баром и кнопкой, при нажатии на которую начинается процесс парсинга.
5. **Обновление прогресс-бара**: В функции `parse_pages` мы обновляем значение прогресс-бара на основе количества обработанных страниц.
### Советы:
- Убедитесь, что операции парсинга не выполняют доступ к элементам интерфейса непосредственно из фонового потока, так как это может привести к ошибкам. Изменяйте значения только через методы, которые безопасны для потоков (как в нашем примере с использованием `DoubleVar`).
- Вы можете добавить обработку ошибок и сообщение о завершении парсинга пользователю (например, с помощью диалогового окна).
Таким образом, вы сможете создатель прогресс-бар и сделать вашу программу отзывчивой во время выполнения длительных задач.