This commit is contained in:
Your Name 2026-01-08 02:13:30 +03:00
parent 18b7178fe6
commit f17cee52fe
4 changed files with 128 additions and 1 deletions

105
screens/settings.py Normal file
View File

@ -0,0 +1,105 @@
from PySide6.QtWidgets import QWidget, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QSizePolicy, QScrollArea
from PySide6.QtCore import Qt
from PySide6.QtGui import QFont
class SettingsRow(QPushButton):
def __init__(self, title: str, subtitle: str):
super().__init__()
self.setObjectName("SettingsRow")
self.setCursor(Qt.PointingHandCursor)
self.setCheckable(False)
self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
self.setMinimumHeight(70)
row = QHBoxLayout(self)
row.setContentsMargins(16, 10, 16, 10)
row.setSpacing(12)
text_col = QVBoxLayout()
text_col.setContentsMargins(0, 0, 0, 0)
text_col.setSpacing(2)
lbl_title = QLabel(title)
lbl_title.setObjectName("SettingsRowTitle")
lbl_title.setFont(QFont("", 16, 600))
lbl_sub = QLabel(subtitle)
lbl_sub.setObjectName("SettingsRowSub")
lbl_sub.setFont(QFont("", 12))
lbl_sub.setWordWrap(True)
text_col.addWidget(lbl_title)
text_col.addWidget(lbl_sub)
chevron = QLabel("")
chevron.setObjectName("SettingsChevron")
chevron.setFont(QFont("", 20, 600))
chevron.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
row.addLayout(text_col)
row.addStretch(1)
row.addWidget(chevron)
class SettingsScreen(QWidget):
def __init__(self):
super().__init__()
root = QVBoxLayout(self)
root.setContentsMargins(18, 16, 18, 16)
root.setSpacing(12)
title = QLabel("Настройки")
title.setFont(QFont("", 24, 700))
root.addWidget(title)
scroll = QScrollArea()
scroll.setWidgetResizable(True)
scroll.setFrameShape(QScrollArea.NoFrame)
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
content = QWidget()
content_layout = QVBoxLayout(content)
content_layout.setContentsMargins(0, 0, 0, 0)
content_layout.setSpacing(12)
self._add_section(
content_layout,
"Сеть",
[
("Wi-Fi", "Доступные сети и подключение"),
("Bluetooth", "Сопряжение и устройства"),
],
)
self._add_section(
content_layout,
"Система",
[
("Об устройстве", "Версия, память, серийный номер"),
("Параметры разработчика", "Отладка и логирование"),
],
)
self._add_section(
content_layout,
"Дисплей и звук",
[
("Экран", "Яркость, сон, тема"),
("Звук", "Громкость, эквалайзер"),
],
)
content_layout.addStretch(1)
scroll.setWidget(content)
root.addWidget(scroll, 1)
def _add_section(self, root: QVBoxLayout, title: str, items: list[tuple[str, str]]):
section = QLabel(title)
section.setObjectName("SettingsSection")
section.setFont(QFont("", 14, 700))
section.setContentsMargins(2, 8, 2, 0)
root.addWidget(section)
for row_title, row_subtitle in items:
root.addWidget(SettingsRow(row_title, row_subtitle))

View File

@ -2,4 +2,15 @@ THEME_DAY = """
QWidget { background: #F4F6F8; color: #111827; }
#TopBar, #BottomBar { background: #FFFFFF; }
#Divider { background: #E5E7EB; }
#SettingsSection { color: rgba(55,65,81,0.9); letter-spacing: 0.5px; }
#SettingsRow {
background: #FFFFFF;
border-radius: 14px;
border: 1px solid #E5E7EB;
}
#SettingsRow:hover { background: #F9FAFB; }
#SettingsRowTitle { color: #111827; }
#SettingsRowSub { color: rgba(107,114,128,0.95); }
#SettingsChevron { color: rgba(107,114,128,0.95); }
"""

View File

@ -2,4 +2,14 @@ THEME_NIGHT = """
QWidget { background: #0B0E11; color: #E6EAF0; }
#TopBar, #BottomBar { background: #0F1318; }
#Divider { background: #1B2330; }
#SettingsSection { color: rgba(138,147,166,0.95); letter-spacing: 0.5px; }
#SettingsRow {
background: #141A22;
border-radius: 14px;
}
#SettingsRow:hover { background: #1B2330; }
#SettingsRowTitle { color: #E6EAF0; }
#SettingsRowSub { color: rgba(138,147,166,0.95); }
#SettingsChevron { color: rgba(138,147,166,0.95); }
"""

View File

@ -5,6 +5,7 @@ from ui.components.divider import divider
from ui.components.nav_button import NavButton
from screens.home import HomeScreen
from screens.stub import StubScreen
from screens.settings import SettingsScreen
from datetime import datetime
from PySide6.QtWidgets import (
QApplication, QMainWindow, QWidget, QLabel, QPushButton,
@ -73,7 +74,7 @@ class MainWindow(QMainWindow):
self.stack.addWidget(StubScreen("Media")) # 1
self.stack.addWidget(StubScreen("Car")) # 2
self.stack.addWidget(StubScreen("Maps")) # 3
self.stack.addWidget(StubScreen("Settings")) # 4
self.stack.addWidget(SettingsScreen()) # 4
# Bottom bar (nav)
self.bottombar = QWidget()