Добавлен новый интерфейс с навигационной панелью и страницами для управления моделями, настройками и генерацией изображений. Реализованы стили для новых компонентов и добавлены функции для загрузки шрифтов и иконок. Обновлен основной класс окна для поддержки новых страниц.

This commit is contained in:
kromskii2 committed 2025-03-15 09:10:31 +07:00
1 parent df447a1ecf
commit ac32c55ab9
25 files changed
+1496 -476

No files matched your search

+103
View File
@@ -0,0 +1,103 @@
from PyQt6.QtWidgets import QWidget, QStackedWidget, QVBoxLayout
from PyQt6.QtCore import QPropertyAnimation, QParallelAnimationGroup, QEasingCurve, Qt, QPoint
from .theme import Theme, Colors
from .theme_manager import ThemeManager
class BasePage(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.theme_manager = ThemeManager.get_instance()
self.setup_ui()
def setup_ui(self):
"""Базовая настройка страницы"""
colors = self.theme_manager.current_theme.get_colors()
self.setStyleSheet(f"""
QWidget {{
background-color: {colors['background']};
}}
""")
# Основной layout
self.layout = QVBoxLayout(self)
self.layout.setContentsMargins(24, 24, 24, 24)
self.layout.setSpacing(16)
def enter_animation(self):
"""Анимация появления страницы"""
# Создаем группу анимаций
self.anim_group = QParallelAnimationGroup()
# Анимация прозрачности
fade_anim = QPropertyAnimation(self, b"windowOpacity")
fade_anim.setStartValue(0.0)
fade_anim.setEndValue(1.0)
fade_anim.setDuration(200)
fade_anim.setEasingCurve(QEasingCurve.Type.OutCubic)
# Анимация сдвига
pos_anim = QPropertyAnimation(self, b"pos")
start_pos = self.pos()
pos_anim.setStartValue(start_pos + QPoint(20, 0))
pos_anim.setEndValue(start_pos)
pos_anim.setDuration(200)
pos_anim.setEasingCurve(QEasingCurve.Type.OutCubic)
# Добавляем анимации в группу
self.anim_group.addAnimation(fade_anim)
self.anim_group.addAnimation(pos_anim)
# Запускаем анимацию
self.anim_group.start()
def leave_animation(self):
"""Анимация исчезновения страницы"""
# Создаем группу анимаций
self.anim_group = QParallelAnimationGroup()
# Анимация прозрачности
fade_anim = QPropertyAnimation(self, b"windowOpacity")
fade_anim.setStartValue(1.0)
fade_anim.setEndValue(0.0)
fade_anim.setDuration(200)
fade_anim.setEasingCurve(QEasingCurve.Type.InCubic)
# Анимация сдвига
pos_anim = QPropertyAnimation(self, b"pos")
start_pos = self.pos()
pos_anim.setStartValue(start_pos)
pos_anim.setEndValue(start_pos - QPoint(20, 0))
pos_anim.setDuration(200)
pos_anim.setEasingCurve(QEasingCurve.Type.InCubic)
# Добавляем анимации в группу
self.anim_group.addAnimation(fade_anim)
self.anim_group.addAnimation(pos_anim)
# Запускаем анимацию
self.anim_group.start()
class PageContainer(QStackedWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.pages = {}
def add_page(self, name: str, page: BasePage):
"""Добавление новой страницы"""
self.pages[name] = page
self.addWidget(page)
def show_page(self, name: str):
"""Показ страницы по имени"""
if name in self.pages:
# Запускаем анимацию исчезновения текущей страницы
current_page = self.currentWidget()
if isinstance(current_page, BasePage):
current_page.leave_animation()
# Показываем новую страницу
new_page = self.pages[name]
self.setCurrentWidget(new_page)
# Запускаем анимацию появления новой страницы
new_page.enter_animation()