Воркед
This commit is contained in:
1 parent
ac32c55ab9
commit
ee94d8e529
1138 files changed
+55771
-77901
No files matched your search
@@ -0,0 +1,153 @@
|
||||
from PyQt6.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout,
|
||||
QLabel, QPushButton, QTextEdit, QComboBox,
|
||||
QScrollArea, QFrame, QCheckBox)
|
||||
from PyQt6.QtCore import Qt, pyqtSignal
|
||||
from ..styles.style_constants import StyleConstants
|
||||
from ..styles.icons import IconManager, IconType
|
||||
|
||||
class NegativePromptCategory(QFrame):
|
||||
"""Виджет категории негативных промптов"""
|
||||
def __init__(self, title: str, prompts: dict, parent=None):
|
||||
super().__init__(parent)
|
||||
self.title = title
|
||||
self.prompts = prompts
|
||||
self.setup_ui()
|
||||
|
||||
def setup_ui(self):
|
||||
layout = QVBoxLayout(self)
|
||||
|
||||
# Заголовок категории
|
||||
title_label = QLabel(self.title)
|
||||
title_label.setStyleSheet(f"""
|
||||
font-size: {StyleConstants.FONTS['size']['lg']};
|
||||
font-weight: {StyleConstants.FONTS['weight']['bold']};
|
||||
margin-bottom: {StyleConstants.SPACING['sm']};
|
||||
""")
|
||||
layout.addWidget(title_label)
|
||||
|
||||
# Список промптов с чекбоксами
|
||||
for prompt, description in self.prompts.items():
|
||||
prompt_frame = QFrame()
|
||||
prompt_layout = QVBoxLayout(prompt_frame)
|
||||
|
||||
checkbox = QCheckBox(prompt)
|
||||
checkbox.setStyleSheet(f"""
|
||||
font-size: {StyleConstants.FONTS['size']['md']};
|
||||
font-weight: {StyleConstants.FONTS['weight']['medium']};
|
||||
""")
|
||||
|
||||
description_label = QLabel(description)
|
||||
description_label.setStyleSheet(f"""
|
||||
color: {StyleConstants.COLORS['light']['text_secondary']};
|
||||
font-size: {StyleConstants.FONTS['size']['sm']};
|
||||
""")
|
||||
description_label.setWordWrap(True)
|
||||
|
||||
prompt_layout.addWidget(checkbox)
|
||||
prompt_layout.addWidget(description_label)
|
||||
layout.addWidget(prompt_frame)
|
||||
|
||||
self.setStyleSheet(f"""
|
||||
QFrame {{
|
||||
background-color: {StyleConstants.COLORS['light']['surface']};
|
||||
border-radius: {StyleConstants.RADIUS['lg']};
|
||||
padding: {StyleConstants.SPACING['md']};
|
||||
margin-bottom: {StyleConstants.SPACING['md']};
|
||||
}}
|
||||
""")
|
||||
|
||||
class NegativePromptWindow(QWidget):
|
||||
"""Окно для работы с негативными промптами"""
|
||||
prompts_selected = pyqtSignal(list)
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.icon_manager = IconManager.get_instance()
|
||||
self.setup_ui()
|
||||
|
||||
def setup_ui(self):
|
||||
self.setWindowTitle("Негативные промпты")
|
||||
self.resize(800, 600)
|
||||
|
||||
# Основной layout
|
||||
layout = QVBoxLayout(self)
|
||||
layout.setSpacing(StyleConstants.SPACING['md'])
|
||||
layout.setContentsMargins(
|
||||
StyleConstants.SPACING['lg'],
|
||||
StyleConstants.SPACING['lg'],
|
||||
StyleConstants.SPACING['lg'],
|
||||
StyleConstants.SPACING['lg']
|
||||
)
|
||||
|
||||
# Верхняя панель
|
||||
top_panel = QHBoxLayout()
|
||||
|
||||
# Поиск
|
||||
self.search_box = QComboBox()
|
||||
self.search_box.setEditable(True)
|
||||
self.search_box.setPlaceholderText("Поиск негативных промптов...")
|
||||
self.search_box.setMinimumWidth(300)
|
||||
top_panel.addWidget(self.search_box)
|
||||
|
||||
# Кнопки
|
||||
select_all_btn = QPushButton("Выбрать все")
|
||||
select_all_btn.setIcon(self.icon_manager.get_icon(IconType.SUCCESS))
|
||||
top_panel.addWidget(select_all_btn)
|
||||
|
||||
clear_btn = QPushButton("Очистить")
|
||||
clear_btn.setIcon(self.icon_manager.get_icon(IconType.CLOSE))
|
||||
top_panel.addWidget(clear_btn)
|
||||
|
||||
top_panel.addStretch()
|
||||
layout.addLayout(top_panel)
|
||||
|
||||
# Область прокрутки для категорий
|
||||
scroll_area = QScrollArea()
|
||||
scroll_area.setWidgetResizable(True)
|
||||
scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
|
||||
|
||||
# Контейнер для категорий
|
||||
categories_widget = QWidget()
|
||||
self.categories_layout = QVBoxLayout(categories_widget)
|
||||
|
||||
# Добавляем тестовые категории
|
||||
test_categories = {
|
||||
"Качество": {
|
||||
"Низкое качество": "Удаляет артефакты низкого качества и размытость",
|
||||
"Шум и зернистость": "Убирает нежелательный шум и зернистость",
|
||||
"Искажения": "Предотвращает искажения пропорций и перспективы"
|
||||
},
|
||||
"Артефакты": {
|
||||
"Двойные элементы": "Убирает дублирование частей изображения",
|
||||
"Размытые лица": "Улучшает четкость и детализацию лиц",
|
||||
"Неправильная анатомия": "Корректирует анатомические ошибки"
|
||||
}
|
||||
}
|
||||
|
||||
for title, prompts in test_categories.items():
|
||||
category = NegativePromptCategory(title, prompts)
|
||||
self.categories_layout.addWidget(category)
|
||||
|
||||
self.categories_layout.addStretch()
|
||||
scroll_area.setWidget(categories_widget)
|
||||
layout.addWidget(scroll_area)
|
||||
|
||||
# Нижняя панель
|
||||
bottom_panel = QHBoxLayout()
|
||||
|
||||
apply_btn = QPushButton("Применить")
|
||||
apply_btn.setIcon(self.icon_manager.get_icon(IconType.SUCCESS))
|
||||
apply_btn.setStyleSheet(f"""
|
||||
background-color: {StyleConstants.COLORS['success']};
|
||||
""")
|
||||
bottom_panel.addWidget(apply_btn)
|
||||
|
||||
cancel_btn = QPushButton("Отмена")
|
||||
cancel_btn.setIcon(self.icon_manager.get_icon(IconType.CLOSE))
|
||||
bottom_panel.addWidget(cancel_btn)
|
||||
|
||||
bottom_panel.addStretch()
|
||||
layout.addLayout(bottom_panel)
|
||||
|
||||
# Применяем стили
|
||||
self.setStyleSheet(StyleConstants.get_base_styles('light'))
|
||||
Reference in new issue
Block a user