add player

This commit is contained in:
Your Name 2026-01-08 03:04:34 +03:00
parent b90adfd155
commit 4760a92942
4 changed files with 187 additions and 1 deletions

118
screens/media.py Normal file
View File

@ -0,0 +1,118 @@
from PySide6.QtWidgets import (
QWidget,
QLabel,
QVBoxLayout,
QHBoxLayout,
QPushButton,
QSlider,
QSizePolicy,
)
from PySide6.QtCore import Qt, QSize
from PySide6.QtGui import QFont
class MediaScreen(QWidget):
def __init__(self):
super().__init__()
root = QVBoxLayout(self)
root.setContentsMargins(18, 16, 18, 16)
root.setSpacing(14)
header = QHBoxLayout()
header.setContentsMargins(0, 0, 0, 0)
header.setSpacing(12)
info_col = QVBoxLayout()
info_col.setContentsMargins(0, 0, 0, 0)
info_col.setSpacing(6)
source = QLabel("Источник: Bluetooth")
source.setObjectName("MediaSource")
source.setFont(QFont("", 14, 600))
title = QLabel("Название трека")
title.setObjectName("MediaTitle")
title.setFont(QFont("", 22, 700))
artist = QLabel("Исполнитель")
artist.setObjectName("MediaArtist")
artist.setFont(QFont("", 16, 600))
info_col.addWidget(source)
info_col.addWidget(title)
info_col.addWidget(artist)
info_col.addStretch(1)
cover = QLabel("COVER")
cover.setObjectName("MediaCover")
cover.setAlignment(Qt.AlignCenter)
cover.setFixedSize(QSize(240, 240))
header.addLayout(info_col, 1)
header.addWidget(cover, 0, Qt.AlignRight | Qt.AlignTop)
controls = QVBoxLayout()
controls.setContentsMargins(0, 0, 0, 0)
controls.setSpacing(12)
progress = QSlider(Qt.Horizontal)
progress.setObjectName("MediaProgress")
progress.setRange(0, 100)
progress.setValue(35)
transport = QHBoxLayout()
transport.setContentsMargins(0, 0, 0, 0)
transport.setSpacing(16)
btn_prev = QPushButton("")
btn_prev.setObjectName("MediaTransportBtn")
btn_prev.setFixedSize(QSize(72, 72))
btn_play = QPushButton("")
btn_play.setObjectName("MediaTransportBtnPrimary")
btn_play.setFixedSize(QSize(96, 72))
btn_next = QPushButton("")
btn_next.setObjectName("MediaTransportBtn")
btn_next.setFixedSize(QSize(72, 72))
transport.addStretch(1)
transport.addWidget(btn_prev)
transport.addWidget(btn_play)
transport.addWidget(btn_next)
transport.addStretch(1)
volume_row = QHBoxLayout()
volume_row.setContentsMargins(0, 0, 0, 0)
volume_row.setSpacing(10)
volume_lbl = QLabel("Громкость")
volume_lbl.setObjectName("MediaVolumeLabel")
volume_lbl.setFont(QFont("", 14, 600))
volume = QSlider(Qt.Horizontal)
volume.setObjectName("MediaVolume")
volume.setRange(0, 100)
volume.setValue(55)
volume.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
volume_row.addWidget(volume_lbl)
volume_row.addWidget(volume, 1)
controls.addWidget(progress)
controls.addLayout(transport)
controls.addLayout(volume_row)
soft_keys = QHBoxLayout()
soft_keys.setContentsMargins(0, 0, 0, 0)
soft_keys.setSpacing(10)
for label in ["SOURCE", "EQ", "FOLDER", "RANDOM", "REPEAT"]:
btn = QPushButton(label)
btn.setObjectName("MediaSoftBtn")
btn.setMinimumHeight(52)
soft_keys.addWidget(btn, 1)
root.addLayout(header)
root.addLayout(controls)
root.addLayout(soft_keys)

View File

@ -58,4 +58,39 @@ QWidget { background: #F4F6F8; color: #111827; }
font-weight: 600; font-weight: 600;
} }
#BluetoothActionBtnPrimary:hover { background: #D1D5DB; } #BluetoothActionBtnPrimary:hover { background: #D1D5DB; }
#MediaSource { color: rgba(107,114,128,0.95); }
#MediaTitle { color: #111827; }
#MediaArtist { color: rgba(55,65,81,0.95); }
#MediaCover {
background: #FFFFFF;
border: 1px solid #E5E7EB;
border-radius: 16px;
color: rgba(107,114,128,0.9);
}
#MediaProgress::groove:horizontal { height: 8px; background: #E5E7EB; border-radius: 4px; }
#MediaProgress::handle:horizontal { width: 18px; margin: -6px 0; background: #111827; border-radius: 9px; }
#MediaVolume::groove:horizontal { height: 8px; background: #E5E7EB; border-radius: 4px; }
#MediaVolume::handle:horizontal { width: 18px; margin: -6px 0; background: #111827; border-radius: 9px; }
#MediaTransportBtn {
background: #FFFFFF;
border-radius: 14px;
border: 1px solid #E5E7EB;
font-size: 22px;
font-weight: 700;
}
#MediaTransportBtnPrimary {
background: #E5E7EB;
border-radius: 14px;
border: 1px solid #D1D5DB;
font-size: 22px;
font-weight: 700;
}
#MediaSoftBtn {
background: #FFFFFF;
border-radius: 12px;
border: 1px solid #E5E7EB;
font-size: 14px;
font-weight: 600;
}
""" """

View File

@ -53,4 +53,36 @@ QWidget { background: #0B0E11; color: #E6EAF0; }
font-weight: 600; font-weight: 600;
} }
#BluetoothActionBtnPrimary:hover { background: #344968; } #BluetoothActionBtnPrimary:hover { background: #344968; }
#MediaSource { color: rgba(138,147,166,0.95); }
#MediaTitle { color: #E6EAF0; }
#MediaArtist { color: rgba(200,208,222,0.95); }
#MediaCover {
background: #141A22;
border: 1px solid #1B2330;
border-radius: 16px;
color: rgba(138,147,166,0.9);
}
#MediaProgress::groove:horizontal { height: 8px; background: #1B2330; border-radius: 4px; }
#MediaProgress::handle:horizontal { width: 18px; margin: -6px 0; background: #E6EAF0; border-radius: 9px; }
#MediaVolume::groove:horizontal { height: 8px; background: #1B2330; border-radius: 4px; }
#MediaVolume::handle:horizontal { width: 18px; margin: -6px 0; background: #E6EAF0; border-radius: 9px; }
#MediaTransportBtn {
background: #141A22;
border-radius: 14px;
font-size: 22px;
font-weight: 700;
}
#MediaTransportBtnPrimary {
background: #2A3A52;
border-radius: 14px;
font-size: 22px;
font-weight: 700;
}
#MediaSoftBtn {
background: #141A22;
border-radius: 12px;
font-size: 14px;
font-weight: 600;
}
""" """

View File

@ -6,6 +6,7 @@ from ui.components.nav_button import NavButton
from screens.home import HomeScreen from screens.home import HomeScreen
from screens.stub import StubScreen from screens.stub import StubScreen
from screens.settings import SettingsScreen from screens.settings import SettingsScreen
from screens.media import MediaScreen
from datetime import datetime from datetime import datetime
from PySide6.QtWidgets import ( from PySide6.QtWidgets import (
QApplication, QMainWindow, QWidget, QLabel, QPushButton, QApplication, QMainWindow, QWidget, QLabel, QPushButton,
@ -71,7 +72,7 @@ class MainWindow(QMainWindow):
# Content stack # Content stack
self.stack = QStackedWidget() self.stack = QStackedWidget()
self.stack.addWidget(HomeScreen()) # 0 self.stack.addWidget(HomeScreen()) # 0
self.stack.addWidget(StubScreen("Media")) # 1 self.stack.addWidget(MediaScreen()) # 1
self.stack.addWidget(StubScreen("Car")) # 2 self.stack.addWidget(StubScreen("Car")) # 2
self.stack.addWidget(StubScreen("Maps")) # 3 self.stack.addWidget(StubScreen("Maps")) # 3
self.stack.addWidget(SettingsScreen()) # 4 self.stack.addWidget(SettingsScreen()) # 4