286 lines
12 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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()