Воркед
This commit is contained in:
1 parent
ac32c55ab9
commit
ee94d8e529
1138 files changed
+55771
-77901
No files matched your search
@@ -0,0 +1,181 @@
|
||||
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;
|
||||
}}
|
||||
"""
|
||||
Reference in new issue
Block a user