Воркед
This commit is contained in:
1 parent
ac32c55ab9
commit
ee94d8e529
1138 files changed
+55771
-77901
No files matched your search
@@ -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)
|
||||
|
||||
|
||||
Reference in new issue
Block a user