This commit is contained in:
Your Name 2026-01-08 02:24:32 +03:00
parent 70cbdfd9bc
commit 6875cccccc
3 changed files with 127 additions and 8 deletions

View File

@ -1,6 +1,17 @@
from PySide6.QtWidgets import QWidget, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QSizePolicy, QScrollArea from PySide6.QtWidgets import (
QWidget,
QLabel,
QVBoxLayout,
QHBoxLayout,
QPushButton,
QSizePolicy,
QScrollArea,
QStackedWidget,
QApplication,
)
from PySide6.QtCore import Qt from PySide6.QtCore import Qt
from PySide6.QtGui import QFont from PySide6.QtGui import QFont
from PySide6.QtWidgets import QScroller
class SettingsRow(QPushButton): class SettingsRow(QPushButton):
@ -49,14 +60,30 @@ class SettingsScreen(QWidget):
root.setContentsMargins(18, 16, 18, 16) root.setContentsMargins(18, 16, 18, 16)
root.setSpacing(12) root.setSpacing(12)
title = QLabel("Настройки") self.stack = QStackedWidget()
title.setFont(QFont("", 24, 700)) root.addWidget(self.stack, 1)
root.addWidget(title)
self._list_screen = QWidget()
list_layout = QVBoxLayout(self._list_screen)
list_layout.setContentsMargins(0, 0, 0, 0)
list_layout.setSpacing(12)
list_title = QLabel("Настройки")
list_title.setFont(QFont("", 24, 700))
list_layout.addWidget(list_title)
scroll = QScrollArea() scroll = QScrollArea()
scroll.setWidgetResizable(True) scroll.setWidgetResizable(True)
scroll.setFrameShape(QScrollArea.NoFrame) scroll.setFrameShape(QScrollArea.NoFrame)
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
# === TOUCH SCROLL (Raspberry safe) ===
scroller = QScroller.scroller(scroll.viewport())
scroller.grabGesture(
scroll.viewport(),
QScroller.LeftMouseButtonGesture
)
content = QWidget() content = QWidget()
content_layout = QVBoxLayout(content) content_layout = QVBoxLayout(content)
@ -72,13 +99,14 @@ class SettingsScreen(QWidget):
], ],
) )
self._add_section( dev_row = self._add_section(
content_layout, content_layout,
"Система", "Система",
[ [
("Об устройстве", "Версия, память, серийный номер"), ("Об устройстве", "Версия, память, серийный номер"),
("Параметры разработчика", "Отладка и логирование"), ("Параметры разработчика", "Отладка и логирование"),
], ],
return_row_title="Параметры разработчика",
) )
self._add_section( self._add_section(
@ -92,14 +120,75 @@ class SettingsScreen(QWidget):
content_layout.addStretch(1) content_layout.addStretch(1)
scroll.setWidget(content) scroll.setWidget(content)
root.addWidget(scroll, 1) list_layout.addWidget(scroll, 1)
def _add_section(self, root: QVBoxLayout, title: str, items: list[tuple[str, str]]): self._dev_screen = self._build_dev_screen()
self.stack.addWidget(self._list_screen)
self.stack.addWidget(self._dev_screen)
if dev_row is not None:
dev_row.clicked.connect(self._show_dev)
def _build_dev_screen(self) -> QWidget:
screen = QWidget()
layout = QVBoxLayout(screen)
layout.setContentsMargins(0, 0, 0, 0)
layout.setSpacing(12)
hdr = QHBoxLayout()
hdr.setContentsMargins(0, 0, 0, 0)
hdr.setSpacing(12)
back_btn = QPushButton("Назад")
back_btn.setObjectName("SettingsBackBtn")
back_btn.setMinimumSize(120, 44)
back_btn.clicked.connect(self._show_list)
title = QLabel("Параметры разработчика")
title.setFont(QFont("", 22, 700))
hdr.addWidget(back_btn)
hdr.addWidget(title)
hdr.addStretch(1)
exit_btn = QPushButton("Переход к рабочему столу")
exit_btn.setObjectName("DevExitBtn")
exit_btn.setMinimumHeight(72)
exit_btn.clicked.connect(self._exit_app)
layout.addLayout(hdr)
layout.addWidget(exit_btn)
layout.addStretch(1)
return screen
def _add_section(
self,
root: QVBoxLayout,
title: str,
items: list[tuple[str, str]],
return_row_title: str | None = None,
):
section = QLabel(title) section = QLabel(title)
section.setObjectName("SettingsSection") section.setObjectName("SettingsSection")
section.setFont(QFont("", 14, 700)) section.setFont(QFont("", 14, 700))
section.setContentsMargins(2, 8, 2, 0) section.setContentsMargins(2, 8, 2, 0)
root.addWidget(section) root.addWidget(section)
target_row = None
for row_title, row_subtitle in items: for row_title, row_subtitle in items:
root.addWidget(SettingsRow(row_title, row_subtitle)) row = SettingsRow(row_title, row_subtitle)
root.addWidget(row)
if return_row_title and row_title == return_row_title:
target_row = row
return target_row
def _show_dev(self):
self.stack.setCurrentWidget(self._dev_screen)
def _show_list(self):
self.stack.setCurrentWidget(self._list_screen)
def _exit_app(self):
app = QApplication.instance()
if app is not None:
app.quit()

View File

@ -13,4 +13,20 @@ QWidget { background: #F4F6F8; color: #111827; }
#SettingsRowTitle { color: #111827; } #SettingsRowTitle { color: #111827; }
#SettingsRowSub { color: rgba(107,114,128,0.95); } #SettingsRowSub { color: rgba(107,114,128,0.95); }
#SettingsChevron { color: rgba(107,114,128,0.95); } #SettingsChevron { color: rgba(107,114,128,0.95); }
#SettingsBackBtn {
background: #FFFFFF;
border-radius: 12px;
border: 1px solid #E5E7EB;
padding: 8px 14px;
}
#SettingsBackBtn:hover { background: #F9FAFB; }
#DevExitBtn {
background: #F3F4F6;
border-radius: 14px;
border: 1px solid #E5E7EB;
font-size: 16px;
font-weight: 600;
}
#DevExitBtn:hover { background: #E5E7EB; }
""" """

View File

@ -12,4 +12,18 @@ QWidget { background: #0B0E11; color: #E6EAF0; }
#SettingsRowTitle { color: #E6EAF0; } #SettingsRowTitle { color: #E6EAF0; }
#SettingsRowSub { color: rgba(138,147,166,0.95); } #SettingsRowSub { color: rgba(138,147,166,0.95); }
#SettingsChevron { color: rgba(138,147,166,0.95); } #SettingsChevron { color: rgba(138,147,166,0.95); }
#SettingsBackBtn {
background: #141A22;
border-radius: 12px;
padding: 8px 14px;
}
#SettingsBackBtn:hover { background: #1B2330; }
#DevExitBtn {
background: #1B2330;
border-radius: 14px;
font-size: 16px;
font-weight: 600;
}
#DevExitBtn:hover { background: #263142; }
""" """