|
| 1 | +# Руководство по интеграции GUI с main.py |
| 2 | + |
| 3 | +## 🔧 Изменения в main.py |
| 4 | + |
| 5 | +Для поддержки конфигурации из GUI в `main.py` были внесены следующие изменения: |
| 6 | + |
| 7 | +### 1. Добавлены импорты |
| 8 | + |
| 9 | +```python |
| 10 | +import json |
| 11 | +import sys |
| 12 | +``` |
| 13 | + |
| 14 | +### 2. Добавлены функции для работы с GUI конфигурацией |
| 15 | + |
| 16 | +```python |
| 17 | +def load_gui_config() -> dict: |
| 18 | + """Загружает конфигурацию из GUI override файла.""" |
| 19 | + gui_settings_path = os.getenv("GUI_SETTINGS") |
| 20 | + if gui_settings_path and os.path.exists(gui_settings_path): |
| 21 | + try: |
| 22 | + with open(gui_settings_path, 'r', encoding='utf-8') as f: |
| 23 | + return json.load(f) |
| 24 | + except Exception as e: |
| 25 | + logger.warning(f"Ошибка загрузки GUI конфигурации: {e}") |
| 26 | + return {} |
| 27 | + |
| 28 | + |
| 29 | +def apply_gui_config(config: dict) -> None: |
| 30 | + """Применяет конфигурацию из GUI к глобальным переменным.""" |
| 31 | + if not config: |
| 32 | + return |
| 33 | + |
| 34 | + # Обновляем переменные в модуле settings |
| 35 | + import src.config.settings as settings_module |
| 36 | + |
| 37 | + for key, value in config.items(): |
| 38 | + if hasattr(settings_module, key): |
| 39 | + setattr(settings_module, key, value) |
| 40 | + logger.debug(f"Применена настройка из GUI: {key} = {value}") |
| 41 | +``` |
| 42 | + |
| 43 | +### 3. Интеграция в функцию main() |
| 44 | + |
| 45 | +```python |
| 46 | +async def main(): |
| 47 | + """Основной процесс обработки видео.""" |
| 48 | + start_time = datetime.now() |
| 49 | + print_header("запуск улучшения видео") |
| 50 | + |
| 51 | + try: |
| 52 | + # Загружаем конфигурацию из GUI |
| 53 | + gui_config = load_gui_config() |
| 54 | + if gui_config: |
| 55 | + apply_gui_config(gui_config) |
| 56 | + logger.info("Загружена конфигурация из GUI") |
| 57 | + |
| 58 | + # Остальной код остается без изменений... |
| 59 | +``` |
| 60 | + |
| 61 | +## 📁 Структура файлов |
| 62 | + |
| 63 | +После интеграции структура проекта должна выглядеть так: |
| 64 | + |
| 65 | +``` |
| 66 | +anime_enhancement/ |
| 67 | +├── main.py # Обновлен для поддержки GUI |
| 68 | +├── gui/ # Новый модуль GUI |
| 69 | +│ ├── app.py # Точка входа GUI |
| 70 | +│ ├── main_window.py # Главное окно |
| 71 | +│ ├── settings_panel.py # Панель настроек |
| 72 | +│ ├── nn_panel.py # Панель нейронных сетей |
| 73 | +│ ├── logs_panel.py # Панель логов |
| 74 | +│ ├── process_controller.py # Контроллер процессов |
| 75 | +│ ├── config.py # Менеджер конфигурации |
| 76 | +│ ├── styles.qss # Стили интерфейса |
| 77 | +│ └── utils/ |
| 78 | +│ └── logger.py # Настройка логирования |
| 79 | +├── tests/ # Тесты GUI |
| 80 | +│ ├── test_gui_config.py |
| 81 | +│ └── test_gui_process_controller.py |
| 82 | +├── requirements-gui.txt # Зависимости для GUI |
| 83 | +├── config.sample.json # Пример конфигурации |
| 84 | +├── run_gui.bat # Запуск на Windows |
| 85 | +├── run_gui.sh # Запуск на Linux/macOS |
| 86 | +├── README_GUI.md # Документация GUI |
| 87 | +└── INTEGRATION_GUIDE.md # Это руководство |
| 88 | +``` |
| 89 | + |
| 90 | +## 🚀 Запуск GUI |
| 91 | + |
| 92 | +### Windows |
| 93 | +```cmd |
| 94 | +run_gui.bat |
| 95 | +``` |
| 96 | + |
| 97 | +### Linux/macOS |
| 98 | +```bash |
| 99 | +./run_gui.sh |
| 100 | +``` |
| 101 | + |
| 102 | +### Ручной запуск |
| 103 | +```bash |
| 104 | +# Установка зависимостей |
| 105 | +pip install -r requirements-gui.txt |
| 106 | + |
| 107 | +# Запуск GUI |
| 108 | +python gui/app.py |
| 109 | +``` |
| 110 | + |
| 111 | +## ⚙️ Принцип работы |
| 112 | + |
| 113 | +1. **GUI загружает настройки** из `src/config/settings.py` |
| 114 | +2. **Пользователь редактирует** настройки через интерфейс |
| 115 | +3. **GUI сохраняет изменения** в `settings_gui_override.json` |
| 116 | +4. **При запуске main.py** через GUI: |
| 117 | + - Устанавливается переменная окружения `GUI_SETTINGS` |
| 118 | + - `main.py` загружает конфигурацию из JSON файла |
| 119 | + - Применяет настройки к модулю `settings` |
| 120 | +5. **Обработка видео** происходит с новыми настройками |
| 121 | + |
| 122 | +## 🔄 Откат изменений |
| 123 | + |
| 124 | +Если нужно откатить изменения: |
| 125 | + |
| 126 | +1. **Удалите файл** `settings_gui_override.json` |
| 127 | +2. **Перезапустите GUI** - настройки вернутся к умолчанию |
| 128 | +3. **Или используйте кнопку** "Reset to Defaults" в GUI |
| 129 | + |
| 130 | +## 🧪 Тестирование |
| 131 | + |
| 132 | +Запуск тестов: |
| 133 | + |
| 134 | +```bash |
| 135 | +# Все тесты GUI |
| 136 | +python -m pytest tests/ -v |
| 137 | + |
| 138 | +# Тесты конфигурации |
| 139 | +python -m pytest tests/test_gui_config.py -v |
| 140 | + |
| 141 | +# Тесты контроллера процессов |
| 142 | +python -m pytest tests/test_gui_process_controller.py -v |
| 143 | +``` |
| 144 | + |
| 145 | +## 🐛 Устранение неполадок |
| 146 | + |
| 147 | +### GUI не запускается |
| 148 | +- Проверьте установку PySide6: `pip list | grep PySide6` |
| 149 | +- Убедитесь, что запускаете из корневой директории проекта |
| 150 | +- Проверьте наличие файлов `main.py` и `src/config/settings.py` |
| 151 | + |
| 152 | +### Процесс не запускается |
| 153 | +- Проверьте путь к входному видео |
| 154 | +- Убедитесь, что папки для выходных файлов существуют |
| 155 | +- Проверьте свободное место на диске (минимум 10 ГБ) |
| 156 | + |
| 157 | +### Ошибки конфигурации |
| 158 | +- Удалите `settings_gui_override.json` для сброса к умолчанию |
| 159 | +- Проверьте права доступа к файлам |
| 160 | +- Убедитесь, что `settings.py` не поврежден |
| 161 | + |
| 162 | +## 📝 Логирование |
| 163 | + |
| 164 | +Логи GUI сохраняются в папке `logs/` с именем файла `gui_YYYYMMDD.log`. |
| 165 | + |
| 166 | +## 🔧 Кастомизация |
| 167 | + |
| 168 | +### Добавление новых настроек |
| 169 | + |
| 170 | +1. **Добавьте поле** в `settings_panel.py` или `nn_panel.py` |
| 171 | +2. **Обновите методы** `get_settings()` и `load_settings()` |
| 172 | +3. **Добавьте переменную** в `src/config/settings.py` |
| 173 | +4. **Обновите** `config.sample.json` |
| 174 | + |
| 175 | +### Изменение стилей |
| 176 | + |
| 177 | +Отредактируйте файл `gui/styles.qss` для изменения внешнего вида. |
| 178 | + |
| 179 | +### Добавление новых панелей |
| 180 | + |
| 181 | +1. **Создайте новый файл** в папке `gui/` |
| 182 | +2. **Наследуйтесь** от `QWidget` |
| 183 | +3. **Добавьте панель** в `main_window.py` |
| 184 | +4. **Обновите навигацию** в sidebar |
| 185 | + |
| 186 | +## 📋 TODO для дальнейшей разработки |
| 187 | + |
| 188 | +- [ ] Добавить поддержку профилей настроек |
| 189 | +- [ ] Реализовать предварительный просмотр кадров |
| 190 | +- [ ] Добавить мониторинг GPU (pynvml) |
| 191 | +- [ ] Создать мастер настройки для новых пользователей |
| 192 | +- [ ] Добавить поддержку пакетной обработки |
| 193 | +- [ ] Реализовать плагинную архитектуру для новых нейронных сетей |
| 194 | +- [ ] Добавить поддержку темной темы |
| 195 | +- [ ] Создать систему уведомлений |
| 196 | +- [ ] Добавить поддержку горячих клавиш |
| 197 | + |
| 198 | +## 🤝 Поддержка |
| 199 | + |
| 200 | +При возникновении проблем: |
| 201 | +1. Проверьте логи в папке `logs/` |
| 202 | +2. Убедитесь, что все зависимости установлены |
| 203 | +3. Проверьте совместимость версий Python и PySide6 |
| 204 | +4. Создайте issue в репозитории проекта |
| 205 | + |
| 206 | +--- |
| 207 | + |
| 208 | +**Примечание**: Этот GUI является MVP (Minimum Viable Product) и может требовать доработки для полной интеграции с вашим проектом. |
0 commit comments