Добавлен новый интерфейс с навигационной панелью и страницами для управления моделями, настройками и генерацией изображений. Реализованы стили для новых компонентов и добавлены функции для загрузки шрифтов и иконок. Обновлен основной класс окна для поддержки новых страниц.
This commit is contained in:
1 parent
df447a1ecf
commit
ac32c55ab9
25 files changed
+1496
-476
No files matched your search
@@ -0,0 +1,75 @@
|
||||
from PyQt6.QtWidgets import QMainWindow, QWidget, QVBoxLayout
|
||||
from PyQt6.QtCore import QEasingCurve, QPropertyAnimation, QRect
|
||||
from .theme_manager import ThemeManager
|
||||
|
||||
class BaseWindow(QMainWindow):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.theme_manager = ThemeManager.get_instance()
|
||||
self.setup_window()
|
||||
|
||||
def setup_window(self):
|
||||
"""Базовая настройка окна"""
|
||||
# Создаем центральный виджет
|
||||
self.central_widget = QWidget()
|
||||
self.setCentralWidget(self.central_widget)
|
||||
|
||||
# Основной layout
|
||||
self.main_layout = QVBoxLayout(self.central_widget)
|
||||
self.main_layout.setContentsMargins(0, 0, 0, 0)
|
||||
self.main_layout.setSpacing(0)
|
||||
|
||||
# Применяем тему
|
||||
self.theme_manager.apply_theme()
|
||||
|
||||
def animate_window(self, start_geometry: QRect, end_geometry: QRect, duration: int = 300):
|
||||
"""Анимация окна"""
|
||||
self.animation = QPropertyAnimation(self, b"geometry")
|
||||
self.animation.setDuration(duration)
|
||||
self.animation.setStartValue(start_geometry)
|
||||
self.animation.setEndValue(end_geometry)
|
||||
self.animation.setEasingCurve(QEasingCurve.Type.OutCubic)
|
||||
self.animation.start()
|
||||
|
||||
def show_with_animation(self):
|
||||
"""Показать окно с анимацией"""
|
||||
# Сохраняем конечную геометрию
|
||||
end_geometry = self.geometry()
|
||||
|
||||
# Устанавливаем начальную геометрию (уменьшенную и прозрачную)
|
||||
start_geometry = QRect(
|
||||
end_geometry.x() + end_geometry.width() // 2,
|
||||
end_geometry.y() + end_geometry.height() // 2,
|
||||
0,
|
||||
0
|
||||
)
|
||||
|
||||
# Запускаем анимацию
|
||||
self.animate_window(start_geometry, end_geometry)
|
||||
super().show()
|
||||
|
||||
def hide_with_animation(self):
|
||||
"""Скрыть окно с анимацией"""
|
||||
# Сохраняем начальную геометрию
|
||||
start_geometry = self.geometry()
|
||||
|
||||
# Устанавливаем конечную геометрию (уменьшенную и прозрачную)
|
||||
end_geometry = QRect(
|
||||
start_geometry.x() + start_geometry.width() // 2,
|
||||
start_geometry.y() + start_geometry.height() // 2,
|
||||
0,
|
||||
0
|
||||
)
|
||||
|
||||
# Запускаем анимацию
|
||||
self.animation = QPropertyAnimation(self, b"geometry")
|
||||
self.animation.setDuration(300)
|
||||
self.animation.setStartValue(start_geometry)
|
||||
self.animation.setEndValue(end_geometry)
|
||||
self.animation.setEasingCurve(QEasingCurve.Type.InCubic)
|
||||
self.animation.finished.connect(super().hide)
|
||||
self.animation.start()
|
||||
|
||||
def toggle_theme(self):
|
||||
"""Переключение темы"""
|
||||
self.theme_manager.toggle_theme()
|
||||
Reference in new issue
Block a user