fff
This commit is contained in:
143
ui.py
143
ui.py
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user