178 lines
6.0 KiB
Python
178 lines
6.0 KiB
Python
from PyQt6.QtWidgets import (QLabel, QPushButton, QHBoxLayout,
|
|
QVBoxLayout, QLineEdit, QListWidget,
|
|
QListWidgetItem, QFrame)
|
|
from PyQt6.QtCore import Qt
|
|
from modules.styles.page import BasePage
|
|
from modules.styles.theme import Colors
|
|
from modules.styles.theme_manager import ThemeManager
|
|
|
|
class ModelItem(QFrame):
|
|
def __init__(self, model_name: str, parent=None):
|
|
super().__init__(parent)
|
|
self.model_name = model_name
|
|
self.theme_manager = ThemeManager.get_instance()
|
|
self.setup_ui()
|
|
|
|
def setup_ui(self):
|
|
"""Настройка UI элемента модели"""
|
|
colors = self.theme_manager.current_theme.get_colors()
|
|
spacing = self.theme_manager.current_theme.get_spacing()
|
|
|
|
layout = QHBoxLayout(self)
|
|
layout.setContentsMargins(8, 8, 8, 8)
|
|
|
|
# Название модели
|
|
name_label = QLabel(self.model_name)
|
|
name_label.setStyleSheet(f"color: {colors['text']};")
|
|
layout.addWidget(name_label)
|
|
|
|
# Растягиваем пространство
|
|
layout.addStretch()
|
|
|
|
# Кнопки управления
|
|
select_btn = QPushButton("Выбрать")
|
|
select_btn.setMinimumWidth(100)
|
|
select_btn.setStyleSheet(f"""
|
|
QPushButton {{
|
|
background-color: {colors['primary']};
|
|
color: white;
|
|
border: none;
|
|
border-radius: {spacing.TINY}px;
|
|
padding: {spacing.SMALL}px {spacing.MEDIUM}px;
|
|
}}
|
|
|
|
QPushButton:hover {{
|
|
background-color: {colors['hover']};
|
|
}}
|
|
|
|
QPushButton:pressed {{
|
|
background-color: {colors['active']};
|
|
}}
|
|
""")
|
|
layout.addWidget(select_btn)
|
|
|
|
delete_btn = QPushButton("Удалить")
|
|
delete_btn.setMinimumWidth(100)
|
|
delete_btn.setStyleSheet(f"""
|
|
QPushButton {{
|
|
background-color: {colors['error']};
|
|
color: white;
|
|
border: none;
|
|
border-radius: {spacing.TINY}px;
|
|
padding: {spacing.SMALL}px {spacing.MEDIUM}px;
|
|
}}
|
|
|
|
QPushButton:hover {{
|
|
background-color: {colors['hover']};
|
|
}}
|
|
|
|
QPushButton:pressed {{
|
|
background-color: {colors['active']};
|
|
}}
|
|
""")
|
|
layout.addWidget(delete_btn)
|
|
|
|
# Стили
|
|
self.setStyleSheet(f"""
|
|
QFrame {{
|
|
background-color: {colors['surface']};
|
|
border: 1px solid {colors['border']};
|
|
border-radius: {spacing.TINY}px;
|
|
}}
|
|
""")
|
|
|
|
class ModelsPage(BasePage):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.theme_manager = ThemeManager.get_instance()
|
|
self.setup_content()
|
|
|
|
def setup_content(self):
|
|
"""Настройка содержимого страницы"""
|
|
colors = self.theme_manager.current_theme.get_colors()
|
|
spacing = self.theme_manager.current_theme.get_spacing()
|
|
|
|
# Заголовок
|
|
header = QLabel("Модели")
|
|
header.setStyleSheet(f"""
|
|
QLabel {{
|
|
color: {colors['text']};
|
|
font-size: 24px;
|
|
font-weight: bold;
|
|
}}
|
|
""")
|
|
self.layout.addWidget(header)
|
|
|
|
# Поиск и добавление
|
|
search_layout = QHBoxLayout()
|
|
|
|
self.search_input = QLineEdit()
|
|
self.search_input.setPlaceholderText("Поиск моделей...")
|
|
self.search_input.setStyleSheet(f"""
|
|
QLineEdit {{
|
|
background-color: {colors['surface']};
|
|
color: {colors['text']};
|
|
border: 1px solid {colors['border']};
|
|
border-radius: {spacing.TINY}px;
|
|
padding: {spacing.SMALL}px;
|
|
}}
|
|
|
|
QLineEdit:focus {{
|
|
border: 1px solid {colors['primary']};
|
|
}}
|
|
""")
|
|
search_layout.addWidget(self.search_input)
|
|
|
|
self.add_btn = QPushButton("Добавить модель")
|
|
self.add_btn.setMinimumWidth(150)
|
|
self.add_btn.setStyleSheet(f"""
|
|
QPushButton {{
|
|
background-color: {colors['primary']};
|
|
color: white;
|
|
border: none;
|
|
border-radius: {spacing.TINY}px;
|
|
padding: {spacing.SMALL}px {spacing.MEDIUM}px;
|
|
}}
|
|
|
|
QPushButton:hover {{
|
|
background-color: {colors['hover']};
|
|
}}
|
|
|
|
QPushButton:pressed {{
|
|
background-color: {colors['active']};
|
|
}}
|
|
""")
|
|
search_layout.addWidget(self.add_btn)
|
|
|
|
self.layout.addLayout(search_layout)
|
|
|
|
# Список моделей
|
|
self.models_list = QListWidget()
|
|
self.models_list.setSpacing(8)
|
|
self.models_list.setStyleSheet(f"""
|
|
QListWidget {{
|
|
background-color: transparent;
|
|
border: none;
|
|
}}
|
|
|
|
QListWidget::item {{
|
|
padding: 0;
|
|
background-color: transparent;
|
|
}}
|
|
""")
|
|
|
|
# Добавляем тестовые модели
|
|
test_models = [
|
|
"stable-diffusion-v1-5",
|
|
"stable-diffusion-v2-1",
|
|
"stable-diffusion-xl-base-1.0"
|
|
]
|
|
|
|
for model in test_models:
|
|
item = QListWidgetItem(self.models_list)
|
|
model_widget = ModelItem(model)
|
|
item.setSizeHint(model_widget.sizeHint())
|
|
self.models_list.addItem(item)
|
|
self.models_list.setItemWidget(item, model_widget)
|
|
|
|
self.layout.addWidget(self.models_list) |