Files
art/modules/styles/style_constants.py
2025-03-15 09:36:28 +07:00

181 lines
5.5 KiB
Python

from typing import Dict
class StyleConstants:
# Цветовая схема
COLORS = {
'primary': '#7E57C2', # Основной цвет
'secondary': '#B39DDB', # Вторичный цвет
'accent': '#536DFE', # Акцентный цвет
'success': '#66BB6A', # Цвет успеха
'warning': '#FFA726', # Цвет предупреждения
'error': '#EF5350', # Цвет ошибки
# Светлая тема
'light': {
'background': 'qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #FFFFFF, stop:1 #F5F5F5)',
'surface': '#FFFFFF',
'text': '#212121',
'text_secondary': '#757575',
'border': '#E0E0E0',
'hover': '#F5F5F5',
'pressed': '#EEEEEE'
},
# Темная тема
'dark': {
'background': 'qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #1A1A1A, stop:1 #2D2D2D)',
'surface': '#2D2D2D',
'text': '#FFFFFF',
'text_secondary': '#B0B0B0',
'border': '#404040',
'hover': '#353535',
'pressed': '#404040'
}
}
# Размеры и отступы (в пикселях)
SPACING = {
'xxs': 4,
'xs': 8,
'sm': 12,
'md': 16,
'lg': 24,
'xl': 32,
'xxl': 48
}
# Радиусы скругления (в пикселях)
RADIUS = {
'sm': 4,
'md': 8,
'lg': 12,
'xl': 16,
'pill': 9999
}
# Тени
SHADOWS = {
'sm': '0 2px 4px rgba(0,0,0,0.1)',
'md': '0 4px 8px rgba(0,0,0,0.1)',
'lg': '0 8px 16px rgba(0,0,0,0.1)'
}
# Анимации
ANIMATIONS = {
'duration': {
'fast': 150,
'normal': 250,
'slow': 350
},
'easing': 'cubic-bezier(0.4, 0, 0.2, 1)'
}
# Шрифты
FONTS = {
'family': {
'primary': 'Inter',
'secondary': 'Roboto'
},
'size': {
'xs': '12px',
'sm': '14px',
'md': '16px',
'lg': '18px',
'xl': '24px',
'xxl': '32px'
},
'weight': {
'regular': '400',
'medium': '500',
'semibold': '600',
'bold': '700'
}
}
@classmethod
def get_base_styles(cls, theme: str = 'light') -> str:
"""Возвращает базовые стили для приложения"""
colors = cls.COLORS[theme]
return f"""
/* Основные стили */
QMainWindow {{
background: {colors['background']};
}}
QWidget {{
color: {colors['text']};
font-family: {cls.FONTS['family']['primary']};
font-size: {cls.FONTS['size']['md']};
}}
/* Кнопки */
QPushButton {{
background-color: {cls.COLORS['primary']};
color: white;
border: none;
border-radius: {cls.RADIUS['md']}px;
padding: {cls.SPACING['sm']}px {cls.SPACING['md']}px;
font-weight: {cls.FONTS['weight']['medium']};
}}
QPushButton:hover {{
background-color: {cls.COLORS['secondary']};
}}
QPushButton:pressed {{
background-color: {cls.COLORS['accent']};
}}
/* Поля ввода */
QLineEdit, QTextEdit {{
background-color: {colors['surface']};
color: {colors['text']};
border: 1px solid {colors['border']};
border-radius: {cls.RADIUS['md']}px;
padding: {cls.SPACING['sm']}px;
selection-background-color: {cls.COLORS['secondary']};
}}
QLineEdit:focus, QTextEdit:focus {{
border-color: {cls.COLORS['primary']};
}}
/* Выпадающие списки */
QComboBox {{
background-color: {colors['surface']};
color: {colors['text']};
border: 1px solid {colors['border']};
border-radius: {cls.RADIUS['md']}px;
padding: {cls.SPACING['sm']}px;
}}
QComboBox:hover {{
border-color: {cls.COLORS['primary']};
}}
/* Полосы прокрутки */
QScrollBar:vertical {{
background-color: {colors['surface']};
width: 12px;
margin: 0;
}}
QScrollBar::handle:vertical {{
background-color: {cls.COLORS['secondary']};
min-height: 20px;
border-radius: {cls.RADIUS['sm']}px;
}}
QScrollBar:horizontal {{
background-color: {colors['surface']};
height: 12px;
margin: 0;
}}
QScrollBar::handle:horizontal {{
background-color: {cls.COLORS['secondary']};
min-width: 20px;
border-radius: {cls.RADIUS['sm']}px;
}}
"""