Воркед

This commit is contained in:
kromskii2 committed 2025-03-15 09:36:28 +07:00
1 parent ac32c55ab9
commit ee94d8e529
1138 files changed
+55771 -77901

No files matched your search

+103 -17
View File
@@ -2,6 +2,7 @@ import sys
import json
import base64
import requests
import os
from time import sleep
from PyQt6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
QHBoxLayout, QLabel, QLineEdit, QPushButton,
@@ -12,8 +13,12 @@ from PyQt6.QtGui import QPixmap, QImage, QAction, QFontDatabase, QFont
from PIL import Image
from io import BytesIO
from pathlib import Path
from dotenv import load_dotenv
# Импортируем новые модули
# Загружаем переменные окружения
load_dotenv()
# Импортируем модули
from modules.console_window import ConsoleWindow
from modules.model_manager import ModelManager
from modules.sampler_manager import SamplerManager
@@ -74,17 +79,22 @@ class MainWindow(BaseWindow):
super().__init__()
self.setWindowTitle("Stable Diffusion UI")
self.setMinimumSize(1200, 800)
# Получаем URL API из переменных окружения
self.api_url = os.getenv('SD_API_URL', 'http://localhost:3000')
# Инициализируем менеджеры
self.model_manager = ModelManager(api_url=self.api_url)
self.sampler_manager = SamplerManager(api_url=self.api_url)
self.size_preset_manager = SizePresetManager()
# Инициализируем окна
self.prompt_window = PromptWindow()
self.negative_prompt_window = NegativePromptWindow()
self.console_window = ConsoleWindow()
self.setup_ui()
def create_horizontal_layout(self):
"""Создает горизонтальный layout для главного окна"""
central_widget = QWidget()
self.setCentralWidget(central_widget)
layout = QHBoxLayout(central_widget)
layout.setContentsMargins(0, 0, 0, 0)
layout.setSpacing(0)
return layout
def setup_ui(self):
# Загружаем шрифт
font_path = Path("resources/fonts/InterVariable.ttf")
@@ -96,20 +106,59 @@ class MainWindow(BaseWindow):
app_font = QFont(font_family)
QApplication.setFont(app_font)
# Создаем горизонтальный layout
layout = self.create_horizontal_layout()
# Создаем центральный виджет
central_widget = QWidget()
self.setCentralWidget(central_widget)
main_layout = QVBoxLayout(central_widget)
main_layout.setContentsMargins(0, 0, 0, 0)
main_layout.setSpacing(0)
# Создаем верхнюю панель
top_panel = QHBoxLayout()
# Кнопки для окон промптов
prompt_btn = QPushButton("Библиотека промптов")
prompt_btn.clicked.connect(self.show_prompt_window)
top_panel.addWidget(prompt_btn)
negative_prompt_btn = QPushButton("Негативные промпты")
negative_prompt_btn.clicked.connect(self.show_negative_prompt_window)
top_panel.addWidget(negative_prompt_btn)
# Пресеты разрешения
resolution_combo = QComboBox()
resolution_combo.addItems(self.size_preset_manager.get_preset_names())
resolution_combo.currentTextChanged.connect(self.on_resolution_changed)
top_panel.addWidget(resolution_combo)
# Кнопка консоли
console_btn = QPushButton("Консоль")
console_btn.clicked.connect(self.show_console)
top_panel.addWidget(console_btn)
top_panel.addStretch()
main_layout.addLayout(top_panel)
# Создаем горизонтальный layout для навигации и контента
content_layout = QHBoxLayout()
# Добавляем навигационную панель
self.nav_panel = NavigationPanel()
layout.addWidget(self.nav_panel)
content_layout.addWidget(self.nav_panel)
# Создаем контейнер для страниц
self.page_container = PageContainer()
layout.addWidget(self.page_container)
content_layout.addWidget(self.page_container)
main_layout.addLayout(content_layout)
# Добавляем страницы
self.home_page = HomePage()
self.models_page = ModelsPage()
self.home_page = HomePage(
model_manager=self.model_manager,
sampler_manager=self.sampler_manager,
size_preset_manager=self.size_preset_manager
)
self.models_page = ModelsPage(self.model_manager)
self.settings_page = SettingsPage()
self.page_container.add_page("home", self.home_page)
@@ -121,7 +170,44 @@ class MainWindow(BaseWindow):
# Показываем домашнюю страницу по умолчанию
self.page_container.show_page("home")
# Загружаем данные
self.load_data()
def load_data(self):
"""Загрузка данных с сервера"""
try:
# Загружаем список моделей
self.model_manager.load_models()
# Загружаем список сэмплеров
self.sampler_manager.load_samplers()
# Обновляем интерфейс
self.home_page.update_ui()
self.models_page.update_ui()
except Exception as e:
self.console_window.log(f"Ошибка загрузки данных: {str(e)}", "ERROR")
def show_prompt_window(self):
"""Показать окно промптов"""
self.prompt_window.show()
def show_negative_prompt_window(self):
"""Показать окно негативных промптов"""
self.negative_prompt_window.show()
def show_console(self):
"""Показать консоль"""
self.console_window.show()
def on_resolution_changed(self, preset_name: str):
"""Обработка изменения пресета разрешения"""
preset = self.size_preset_manager.get_preset(preset_name)
if preset:
self.home_page.set_resolution(preset.width, preset.height)
def switch_page(self, page_name):
self.page_container.show_page(page_name)