This commit is contained in:
unknown
2026-02-12 00:19:38 +05:00
parent be7aadf218
commit c348a19052
5 changed files with 391 additions and 70 deletions

143
ui.py
View File

@@ -147,6 +147,49 @@ class UIManager:
)
process_label.pack(anchor="w", pady=(0, 15))
# ===== ПОЛЕ 4: ВЫБОР ВКЛАДКИ НА СТРАНИЦЕ =====
tab_select_label = tk.Label(
main_frame,
text="📑 Вкладка на странице для обработки:",
font=self.font_label,
bg="#2C3E50",
fg="#ECF0F1"
)
tab_select_label.pack(anchor="w", pady=(10, 5))
# Фрейм для списка вкладок и выпадающего списка
tab_config_frame = tk.Frame(main_frame, bg="#2C3E50")
tab_config_frame.pack(fill=tk.X, pady=(0, 5))
# Поле для ввода доступных вкладок
tab_list_label = tk.Label(
main_frame,
text="Доступные вкладки (через запятую):",
font=("Arial", 9),
bg="#2C3E50",
fg="#BDC3C7"
)
tab_list_label.pack(anchor="w", pady=(0, 2))
self.tabs_list_entry = tk.Entry(main_frame, font=self.font_label)
self.tabs_list_entry.pack(anchor="w", fill=tk.X, pady=(0, 5))
self.tabs_list_entry.insert(0, "Внесение ФС, Корректировка ОН, Внесение КС")
self.tabs_list_entry.bind("<KeyRelease>", self._update_tab_selector)
# Выпадающий список для выбора вкладки
tab_choice_label = tk.Label(
main_frame,
text="Выберите вкладку:",
font=("Arial", 9),
bg="#2C3E50",
fg="#BDC3C7"
)
tab_choice_label.pack(anchor="w", pady=(5, 2))
self.tab_choice_combo = ttk.Combobox(main_frame, state="readonly", font=self.font_label)
self.tab_choice_combo.pack(anchor="w", fill=tk.X, pady=(0, 15))
self._update_tab_selector() # Инициализация списка вкладок
# ===== ЛОГИРОВАНИЕ =====
log_label = tk.Label(
main_frame,
@@ -205,19 +248,28 @@ class UIManager:
# Перенаправление логов в текстовое поле
self._setup_log_handler()
# ===== ВЫБОР ВКЛАДКИ =====
tabs_label = tk.Label(
main_frame,
text="📑 Выбор вкладки браузера:",
font=self.font_label,
bg="#2C3E50",
fg="#ECF0F1"
)
tabs_label.pack(anchor="w", pady=(10, 5))
self.tab_selector = TabSelectorApp(main_frame, BrowserService(download_dir="./downloads"))
self.tab_selector.pack(fill=tk.X, pady=(0, 15))
def _update_tab_selector(self, event=None):
"""Обновляет выпадающий список вкладок на основе введенного текста."""
tabs_text = self.tabs_list_entry.get().strip()
if tabs_text:
tabs = [t.strip() for t in tabs_text.split(",") if t.strip()]
self.tab_choice_combo["values"] = tabs
if tabs and self.tab_choice_combo.current() == -1:
self.tab_choice_combo.current(0) # Выбираем первую по умолчанию
else:
self.tab_choice_combo["values"] = []
def _update_tab_selector(self, event=None):
"""Обновляет выпадающий список вкладок на основе введенного текста."""
tabs_text = self.tabs_list_entry.get().strip()
if tabs_text:
tabs = [t.strip() for t in tabs_text.split(",") if t.strip()]
self.tab_choice_combo["values"] = tabs
if tabs and self.tab_choice_combo.current() == -1:
self.tab_choice_combo.current(0) # Выбираем первую по умолчанию
else:
self.tab_choice_combo["values"] = []
def _setup_log_handler(self):
"""Настраивает обработчик логов в текстовое поле."""
@@ -276,18 +328,21 @@ class UIManager:
upload_texts = [t.strip() for t in self.upload_buttons_entry.get().split(",")]
process_texts = [t.strip() for t in self.process_buttons_entry.get().split(",")]
# Получаем выбранную вкладку
selected_tab = self.tab_choice_combo.get().strip() if self.tab_choice_combo.get() else None
# Отключаем кнопку и запускаем обработку в потоке
self.processing = True
self.start_button.config(state="disabled", bg="#95A5A6")
thread = threading.Thread(
target=self._processing_thread,
args=(directory, url, upload_texts, process_texts),
args=(directory, url, upload_texts, process_texts, selected_tab),
daemon=True
)
thread.start()
def _processing_thread(self, directory, url, upload_texts, process_texts):
def _processing_thread(self, directory, url, upload_texts, process_texts, selected_tab=None):
"""Потоковая функция обработки."""
try:
logging.info("\n" + "="*70)
@@ -301,17 +356,19 @@ class UIManager:
# Создаем процессор
processor = FileProcessorService(directory, url, download_dir)
# Проверка вкладок перед началом загрузки
browser_service = BrowserService(download_dir="./downloads")
browser_service.set_tabs(["Вкладка 1", "Вкладка 2", "Вкладка 3"])
# Пример: выбор вкладки по индексу
if not browser_service.select_tab_from_list(0):
logging.error("Не удалось выбрать вкладку. Проверьте массив вкладок.")
return
# Выбор вкладки на странице (если указана)
if selected_tab:
logging.info(f"🔍 Попытка выбрать вкладку на странице: '{selected_tab}'")
browser_service = processor.browser
if browser_service and browser_service.select_tab_by_multiple_methods(selected_tab, timeout=15):
logging.info(f"✅ Вкладка '{selected_tab}' успешно выбрана")
else:
logging.warning(f"⚠️ Не удалось выбрать вкладку '{selected_tab}', продолжаю без выбора вкладки")
else:
logging.info(" Вкладка не указана, пропускаю выбор вкладки")
# Запускаем обработку
results = processor.start_processing(upload_texts, process_texts)
results = processor.start_processing(upload_texts, process_texts, selected_tab)
# Показываем результаты
self._show_results(results)
@@ -357,44 +414,6 @@ class UIManager:
messagebox.showerror("Ошибка", "Буфер обмена пуст или недоступен.")
class TabSelectorApp:
def __init__(self, parent, browser_service):
self.browser_service = browser_service
self.frame = tk.Frame(parent, bg="#2C3E50")
# Выпадающий список
self.combo = ttk.Combobox(self.frame, state="readonly")
self.combo.pack(pady=10)
# Кнопка для выбора вкладки
self.select_button = tk.Button(self.frame, text="Выбрать вкладку", command=self.select_tab)
self.select_button.pack(pady=10)
def pack(self, **kwargs):
"""Упрощает упаковку фрейма."""
self.frame.pack(**kwargs)
def set_tabs(self, tabs):
"""Устанавливает массив вкладок и обновляет выпадающий список."""
self.tabs = tabs
self.combo["values"] = self.tabs
if self.tabs:
self.combo.current(0) # Устанавливаем первый элемент по умолчанию
def select_tab(self):
"""Выбирает вкладку из выпадающего списка."""
selected_index = self.combo.current()
if selected_index == -1:
print("❌ Вкладка не выбрана.")
return
success = self.browser_service.select_tab_from_list(selected_index)
if success:
print(f"✅ Вкладка '{self.tabs[selected_index]}' выбрана.")
else:
print(f"Не удалось выбрать вкладку '{self.tabs[selected_index]}'." )
def main():
"""Главная функция."""
root = tk.Tk()