# main.py import tkinter as tk from tkinter import ttk, messagebox import sys import os # Добавляем текущую директорию в путь Python sys.path.append(os.path.dirname(os.path.abspath(__file__))) # Импортируем наши модули try: from modules.serial_writer import SerialWriterTab from modules.bots_module import BotsCountTab from modules.light_module import LightModuleTab from modules.electronics_module import ElectronicsModuleTab from modules.server_module import ServerModuleTab except ImportError as e: print(f"Ошибка импорта модуля: {e}") print("Проверьте, что файлы модулей существуют в папке modules/") sys.exit(1) class ConfiguratorApp: def __init__(self, root): self.root = root self.root.title("🎮 Конфигуратор игры 'Фишка'") self.root.geometry("1100x800") # Немного увеличим размер # Центрируем окно self.center_window() # Создаем стиль для вкладок self.style = ttk.Style() self.style.theme_use('clam') # Настраиваем стиль вкладок self.style.configure('TNotebook', background='#f0f0f0') self.style.configure('TNotebook.Tab', padding=[20, 8], font=('Arial', 11, 'bold'), foreground='#333333') # Стиль для активной вкладки self.style.map('TNotebook.Tab', background=[('selected', '#2196F3'), ('!selected', '#E0E0E0')], foreground=[('selected', 'white'), ('!selected', '#666666')]) # Создаем главный контейнер self.main_container = ttk.Frame(root) self.main_container.pack(fill=tk.BOTH, expand=True, padx=10, pady=5) # Создаем Notebook для вкладок self.notebook = ttk.Notebook(self.main_container) self.notebook.pack(fill=tk.BOTH, expand=True) # Словари для хранения вкладок и модулей self.tabs = {} self.modules = {} # Инициализируем вкладки self.init_tabs() # Загрузка сохраненных данных при запуске self.load_saved_data() def center_window(self): """Центрировать окно на экране""" self.root.update_idletasks() width = 1100 height = 800 screen_width = self.root.winfo_screenwidth() screen_height = self.root.winfo_screenheight() x = (screen_width - width) // 2 y = (screen_height - height) // 2 self.root.geometry(f'{width}x{height}+{x}+{y}') def init_tabs(self): """Инициализация вкладок с модулями""" print("🔧 Инициализация модулей...") # 1. Серийный номер (первая вкладка) self.add_module_tab("serial", "📋 СЕРИЙНЫЙ НОМЕР", SerialWriterTab) # 2. Количество ботов (вторая вкладка) # self.add_module_tab("bots", "🤖 КОЛИЧЕСТВО БОТОВ", BotsCountTab) # 3. Настройка подсветки (третья вкладка) self.add_module_tab("light", "💡 ПОДСВЕТКА", LightModuleTab) self.add_module_tab("electronics", "⚡ ЭЛЕКТРОНИКА", ElectronicsModuleTab) self.add_module_tab("server", "🌐 ВЕБ-СЕРВЕР", ServerModuleTab) print(f"✅ Загружено модулей: {len(self.modules)}") # Устанавливаем первую вкладку активной if self.tabs: self.notebook.select(0) def add_module_tab(self, module_id, tab_name, module_class): """ Добавить вкладку с модулем Args: module_id: Уникальный идентификатор модуля tab_name: Название вкладки module_class: Класс модуля """ print(f" ⏳ Загрузка модуля: {module_id}") try: # Создаем фрейм для вкладки tab_frame = ttk.Frame(self.notebook) # Добавляем фрейм в notebook self.notebook.add(tab_frame, text=tab_name) # Создаем экземпляр модуля module_instance = module_class(tab_frame) # Сохраняем модуль self.modules[module_id] = module_instance self.tabs[tab_name] = { 'frame': tab_frame, 'module': module_instance, 'type': 'module' } print(f" ✅ Модуль '{module_id}' загружен успешно") except Exception as e: print(f" ❌ Ошибка загрузки модуля '{module_id}': {e}") # Создаем фрейм с ошибкой tab_frame = ttk.Frame(self.notebook) self.notebook.add(tab_frame, text=f"❌ {tab_name}") error_frame = ttk.Frame(tab_frame, padding=50) error_frame.pack(fill=tk.BOTH, expand=True) ttk.Label( error_frame, text=f"Ошибка загрузки модуля:\n{str(e)}", font=('Arial', 12), foreground='red', justify=tk.CENTER ).pack(expand=True) self.tabs[tab_name] = { 'frame': tab_frame, 'error': str(e), 'type': 'error' } def load_saved_data(self): """Загрузить сохраненные данные при запуске""" try: # Загружаем серийный номер if 'serial' in self.modules: if hasattr(self.modules['serial'], 'load_serial_from_file'): loaded = self.modules['serial'].load_serial_from_file() if loaded: print("✓ Серийный номер загружен из файла") # Загружаем настройки подсветки if 'light' in self.modules: if hasattr(self.modules['light'], 'check_light_version'): version = self.modules['light'].check_light_version() if version: print(f"✓ Версия подсветки загружена: {version}") except Exception as e: print(f"Ошибка загрузки данных: {e}") def save_all(self): """Сохранить все данные из всех модулей""" saved_modules = [] errors = [] # Сохраняем данные из всех модулей for module_id, module in self.modules.items(): try: if hasattr(module, 'save_serial'): module.save_serial() saved_modules.append("Серийный номер") elif hasattr(module, 'save_bots_amount'): module.save_bots_amount() saved_modules.append("Количество ботов") elif hasattr(module, 'save_light_config'): module.save_light_config() saved_modules.append("Подсветка") elif hasattr(module, 'save_electro_config'): module.save_electro_config() saved_modules.append("Электроника") elif hasattr(module, 'save_server_config'): module.save_server_config() saved_modules.append("Веб-сервер") except Exception as e: errors.append(f"{module_id}: {str(e)[:50]}...") # Показываем результат if saved_modules: if errors: message = ( f"✅ Успешно сохранено:\n" f"{', '.join(saved_modules)}\n\n" f"❌ Ошибки:\n" f"{chr(10).join(errors)}" ) messagebox.showwarning("Сохранение с ошибками", message) else: message = f"✅ Все настройки успешно сохранены!\n\nСохранено: {', '.join(saved_modules)}" messagebox.showinfo("Сохранение завершено", message) else: if errors: message = f"❌ Не удалось сохранить данные:\n\n{chr(10).join(errors)}" messagebox.showerror("Ошибка сохранения", message) else: messagebox.showinfo("Сохранение", "Нет данных для сохранения.") def refresh_all(self): """Обновить все модули""" for module_id, module in self.modules.items(): try: if hasattr(module, 'update_status'): module.update_status() elif hasattr(module, 'check_light_version'): module.check_light_version() except Exception as e: print(f"Ошибка обновления модуля {module_id}: {e}") print("✓ Все модули обновлены") def check_all_modules(self): """Проверить все модули""" results = [] for module_id, module in self.modules.items(): try: if module_id == 'serial': serial = module.get_serial_number() if serial: results.append(f"✅ Серийный номер: {serial}") else: results.append("⚠️ Серийный номер: не заполнен") elif module_id == 'bots': bots = module.get_bots_count() results.append(f"✅ Количество ботов: {bots}") elif module_id == 'light': version = module.get_current_version() if version: results.append(f"✅ Версия подсветки: {version}") else: results.append("⚠️ Подсветка: не настроена") elif module_id == 'electronics': version = module.get_current_version() if version: results.append(f"✅ Версия электроники: {version}") else: results.append("⚠️ Электроника: не настроена") except Exception as e: results.append(f"❌ {module_id}: ошибка - {str(e)[:50]}") if results: message = "🔍 Результаты проверки всех модулей:\n\n" + "\n".join(results) messagebox.showinfo("Проверка настроек", message) else: messagebox.showinfo("Проверка настроек", "Нет загруженных модулей для проверки.") def main(): root = tk.Tk() app = ConfiguratorApp(root) root.mainloop() if __name__ == "__main__": main()