Воркед

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

+91
View File
@@ -0,0 +1,91 @@
from PyQt6.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout,
QLabel, QPushButton, QTextEdit, QComboBox)
from PyQt6.QtCore import Qt, pyqtSignal
from PyQt6.QtGui import QTextCursor
from ..styles.style_constants import StyleConstants
from ..styles.icons import IconManager, IconType
class ConsoleWindow(QWidget):
"""Окно для консольного вывода"""
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(600, 400)
# Основной 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.log_level = QComboBox()
self.log_level.addItems(["INFO", "WARNING", "ERROR", "DEBUG"])
top_panel.addWidget(self.log_level)
# Кнопки
clear_btn = QPushButton("Очистить")
clear_btn.setIcon(self.icon_manager.get_icon(IconType.DELETE))
clear_btn.clicked.connect(self.clear_console)
top_panel.addWidget(clear_btn)
save_btn = QPushButton("Сохранить")
save_btn.setIcon(self.icon_manager.get_icon(IconType.SAVE))
top_panel.addWidget(save_btn)
top_panel.addStretch()
layout.addLayout(top_panel)
# Консоль
self.console = QTextEdit()
self.console.setReadOnly(True)
self.console.setStyleSheet(f"""
QTextEdit {{
background-color: {StyleConstants.COLORS['dark']['background']};
color: {StyleConstants.COLORS['dark']['text']};
font-family: 'Consolas', monospace;
font-size: {StyleConstants.FONTS['size']['md']};
padding: {StyleConstants.SPACING['md']}px;
border-radius: {StyleConstants.RADIUS['md']}px;
}}
""")
layout.addWidget(self.console)
# Применяем стили
self.setStyleSheet(StyleConstants.get_base_styles('light'))
def log(self, message: str, level: str = "INFO"):
"""Добавление сообщения в консоль"""
color = {
"INFO": StyleConstants.COLORS['primary'],
"WARNING": StyleConstants.COLORS['warning'],
"ERROR": StyleConstants.COLORS['error'],
"DEBUG": StyleConstants.COLORS['secondary']
}.get(level, StyleConstants.COLORS['primary'])
# Форматируем сообщение
formatted_message = f'<span style="color: {color}">[{level}]</span> {message}<br>'
# Добавляем сообщение в консоль
cursor = self.console.textCursor()
cursor.movePosition(QTextCursor.MoveOperation.End)
cursor.insertHtml(formatted_message)
# Прокручиваем к последнему сообщению
self.console.setTextCursor(cursor)
self.console.ensureCursorVisible()
def clear_console(self):
"""Очистка консоли"""
self.console.clear()
+153
View File
@@ -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'))
+117
View File
@@ -0,0 +1,117 @@
from PyQt6.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout,
QLabel, QPushButton, QTextEdit, QComboBox,
QScrollArea, QFrame)
from PyQt6.QtCore import Qt, pyqtSignal
from ..styles.style_constants import StyleConstants
from ..styles.icons import IconManager, IconType
class PromptCategory(QFrame):
"""Виджет категории промптов"""
def __init__(self, title: str, prompts: list, 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 in self.prompts:
btn = QPushButton(prompt)
btn.setStyleSheet(f"""
text-align: left;
padding: {StyleConstants.SPACING['sm']};
margin-bottom: {StyleConstants.SPACING['xs']};
""")
layout.addWidget(btn)
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 PromptWindow(QWidget):
"""Окно для работы с промптами"""
prompt_selected = pyqtSignal(str)
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)
# Кнопки
add_btn = QPushButton("Добавить промпт")
add_btn.setIcon(self.icon_manager.get_icon(IconType.ADD))
top_panel.addWidget(add_btn)
refresh_btn = QPushButton("Обновить")
refresh_btn.setIcon(self.icon_manager.get_icon(IconType.REFRESH))
top_panel.addWidget(refresh_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 = PromptCategory(title, prompts)
self.categories_layout.addWidget(category)
self.categories_layout.addStretch()
scroll_area.setWidget(categories_widget)
layout.addWidget(scroll_area)
# Применяем стили
self.setStyleSheet(StyleConstants.get_base_styles('light'))