# -*- coding: utf-8 -*- import qtawesome as qta from PyQt5 import QtCore, QtGui, QtWidgets LIST_WIDGET_STYLES = """ QListWidget { border: 0; } """ class UiMainWindow(object): def setup_ui(self): self.setWindowIcon(QtGui.QIcon(":/icon/playtypus.png")) self.setObjectName("MainWindow") self.resize(719, 574) self.setStyleSheet(LIST_WIDGET_STYLES) self.centralwidget = QtWidgets.QWidget(self) self.centralwidget.setObjectName("centralwidget") self.centralLayout = QtWidgets.QVBoxLayout(self.centralwidget) self.centralLayout.setContentsMargins(0, 0, 0, 0) self.centralLayout.setSpacing(0) self.centralLayout.setObjectName("centralLayout") # Playback toolbar self.playbackToolBar = QtWidgets.QToolBar(self) self.playbackToolBar.setMovable(False) self.playbackToolBar.setIconSize(QtCore.QSize(32, 32)) self.playbackToolBar.setObjectName("playbackToolBar") self.toggleAction = self.playbackToolBar.addAction(qta.icon("mdi.chevron-down"), '') self.previousAction = self.playbackToolBar.addAction(qta.icon("mdi.skip-previous"), '') self.playAction = self.playbackToolBar.addAction(qta.icon("mdi.play"), '') self.nextAction = self.playbackToolBar.addAction(qta.icon("mdi.skip-next"), '') self.positionLabel = QtWidgets.QLabel() self.positionLabel.setAlignment(QtCore.Qt.AlignCenter) self.positionLabel.setObjectName("positionLabel") self.playbackToolBar.addWidget(self.positionLabel) self.positionSlider = QtWidgets.QSlider() self.positionSlider.setOrientation(QtCore.Qt.Horizontal) self.positionSlider.setObjectName("positionSlider") self.playbackToolBar.addWidget(self.positionSlider) self.shuffleAction = self.playbackToolBar.addAction(qta.icon("mdi.shuffle"), '') self.repeatAction = self.playbackToolBar.addAction(qta.icon("mdi.repeat"), '') self.muteAction = self.playbackToolBar.addAction(qta.icon("mdi.volume-high"), '') self.muteAction.setCheckable(True) self.volumeSlider = QtWidgets.QSlider() self.volumeSlider.setOrientation(QtCore.Qt.Horizontal) self.volumeSlider.setObjectName("volumeSlider") self.playbackToolBar.addWidget(self.volumeSlider) self.mainMenu = QtWidgets.QMenu() self.settingsAction = self.mainMenu.addAction(qta.icon('mdi.application-settings'), '') self.menuAction = self.playbackToolBar.addAction(qta.icon("mdi.menu"), '') self.menuAction.setMenu(self.mainMenu) menuButton = self.playbackToolBar.widgetForAction(self.menuAction) self.menuAction.triggered.connect(menuButton.showMenu) self.addToolBar(self.playbackToolBar) # Splitter and main components self.splitter = QtWidgets.QSplitter(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.splitter.sizePolicy().hasHeightForWidth()) self.splitter.setSizePolicy(sizePolicy) self.splitter.setOrientation(QtCore.Qt.Horizontal) self.splitter.setHandleWidth(1) self.splitter.setObjectName("splitter") self.viewListWidget = QtWidgets.QListWidget(self.splitter) self.viewListWidget.setIconSize(QtCore.QSize(40, 40)) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.viewListWidget.sizePolicy().hasHeightForWidth()) self.viewListWidget.setSizePolicy(sizePolicy) self.viewListWidget.setObjectName("viewListWidget") self.stackedWidget = QtWidgets.QStackedWidget(self.splitter) self.stackedWidget.setObjectName("stackedWidget") # Albums page self.albumPage = QtWidgets.QWidget() self.albumPage.setObjectName("albumPage") self.albumPageLayout = QtWidgets.QVBoxLayout(self.albumPage) self.albumPageLayout.setContentsMargins(0, 0, 0, 0) self.albumPageLayout.setSpacing(0) self.albumPageLayout.setObjectName("albumPageLayout") self.albumPageTitleLayout = QtWidgets.QHBoxLayout() self.albumPageTitleLayout.setContentsMargins(0, 0, 0, 0) self.albumPageTitleLayout.setSpacing(0) self.albumPageTitleLayout.setObjectName("albumPageTitleLayout") self.albumPageIconLabel = QtWidgets.QLabel(self.albumPage) self.albumPageIconLabel.setMaximumSize(36, 36) self.albumPageIconLabel.setPixmap(qta.icon('mdi.album').pixmap(32)) self.albumPageTitleLayout.addWidget(self.albumPageIconLabel) self.albumPageTitleLabel = QtWidgets.QLabel(self.albumPage) self.albumPageTitleLayout.addWidget(self.albumPageTitleLabel) self.albumPageTotalLabel = QtWidgets.QLabel(self.albumPage) self.albumPageTotalLabel.setAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight) self.albumPageTotalLabel.setIndent(4) self.albumPageTotalLabel.setText('0') self.albumPageTitleLayout.addWidget(self.albumPageTotalLabel) self.albumPageLayout.addLayout(self.albumPageTitleLayout) self.albumListWidget = QtWidgets.QListWidget(self.albumPage) self.albumListWidget.setObjectName("albumListWidget") self.albumListWidget.setSortingEnabled(True) self.albumListWidget.setIconSize(QtCore.QSize(100, 100)) self.albumPageLayout.addWidget(self.albumListWidget) self.stackedWidget.addWidget(self.albumPage) # Artists page self.artistPage = QtWidgets.QWidget() self.artistPage.setObjectName("artistPage") self.artistPageLayout = QtWidgets.QVBoxLayout(self.artistPage) self.artistPageLayout.setContentsMargins(0, 0, 0, 0) self.artistPageLayout.setSpacing(0) self.artistPageLayout.setObjectName("artistPageLayout") self.artistPageTitleLayout = QtWidgets.QHBoxLayout() self.artistPageTitleLayout.setContentsMargins(0, 0, 0, 0) self.artistPageTitleLayout.setSpacing(0) self.artistPageTitleLayout.setObjectName("artistPageTitleLayout") self.artistPageIconLabel = QtWidgets.QLabel(self.artistPage) self.artistPageIconLabel.setMaximumSize(36, 36) self.artistPageIconLabel.setPixmap(qta.icon('mdi.account').pixmap(32)) self.artistPageTitleLayout.addWidget(self.artistPageIconLabel) self.artistPageTitleLabel = QtWidgets.QLabel(self.artistPage) self.artistPageTitleLayout.addWidget(self.artistPageTitleLabel) self.artistPageTotalLabel = QtWidgets.QLabel(self.artistPage) self.artistPageTotalLabel.setAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight) self.artistPageTotalLabel.setIndent(4) self.artistPageTotalLabel.setText('0') self.artistPageTitleLayout.addWidget(self.artistPageTotalLabel) self.artistPageLayout.addLayout(self.artistPageTitleLayout) self.artistListWidget = QtWidgets.QListWidget(self.artistPage) self.artistListWidget.setObjectName("artistListWidget") self.artistListWidget.setSortingEnabled(True) self.artistListWidget.setIconSize(QtCore.QSize(100, 100)) self.artistPageLayout.addWidget(self.artistListWidget) self.stackedWidget.addWidget(self.artistPage) # Playlists page self.playlistPage = QtWidgets.QWidget() self.playlistPage.setObjectName("playlistPage") self.playlistPageLayout = QtWidgets.QVBoxLayout(self.playlistPage) self.playlistPageLayout.setContentsMargins(0, 0, 0, 0) self.playlistPageLayout.setSpacing(0) self.playlistPageLayout.setObjectName("playlistPageLayout") self.playlistPageTitleLayout = QtWidgets.QHBoxLayout() self.playlistPageTitleLayout.setContentsMargins(0, 0, 0, 0) self.playlistPageTitleLayout.setSpacing(0) self.playlistPageTitleLayout.setObjectName("playlistPageTitleLayout") self.playlistPageIconLabel = QtWidgets.QLabel(self.playlistPage) self.playlistPageIconLabel.setMaximumSize(36, 36) self.playlistPageIconLabel.setPixmap(qta.icon('mdi.playlist-music').pixmap(32)) self.playlistPageTitleLayout.addWidget(self.playlistPageIconLabel) self.playlistPageTitleLabel = QtWidgets.QLabel(self.playlistPage) self.playlistPageTitleLayout.addWidget(self.playlistPageTitleLabel) self.playlistPageTotalLabel = QtWidgets.QLabel(self.playlistPage) self.playlistPageTotalLabel.setAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight) self.playlistPageTotalLabel.setIndent(4) self.playlistPageTotalLabel.setText('0') self.playlistPageTitleLayout.addWidget(self.playlistPageTotalLabel) self.playlistPageLayout.addLayout(self.playlistPageTitleLayout) self.playlistListWidget = QtWidgets.QListWidget(self.playlistPage) self.playlistListWidget.setObjectName("playlistListWidget") self.playlistListWidget.setSortingEnabled(True) self.playlistListWidget.setIconSize(QtCore.QSize(64, 64)) self.playlistPageLayout.addWidget(self.playlistListWidget) self.stackedWidget.addWidget(self.playlistPage) # Radio page self.radioPage = QtWidgets.QWidget() self.radioPage.setObjectName("radioPage") self.radioPageLayout = QtWidgets.QVBoxLayout(self.radioPage) self.radioPageLayout.setContentsMargins(0, 0, 0, 0) self.radioPageLayout.setSpacing(0) self.radioPageLayout.setObjectName("radioPageLayout") self.radioPageTitleLayout = QtWidgets.QHBoxLayout() self.radioPageTitleLayout.setContentsMargins(0, 0, 0, 0) self.radioPageTitleLayout.setSpacing(0) self.radioPageTitleLayout.setObjectName("radioPageTitleLayout") self.radioPageIconLabel = QtWidgets.QLabel(self.radioPage) self.radioPageIconLabel.setMaximumSize(36, 36) self.radioPageIconLabel.setPixmap(qta.icon('mdi.radio').pixmap(32)) self.radioPageTitleLayout.addWidget(self.radioPageIconLabel) self.radioPageTitleLabel = QtWidgets.QLabel(self.radioPage) self.radioPageTitleLayout.addWidget(self.radioPageTitleLabel) self.radioPageTotalLabel = QtWidgets.QLabel(self.radioPage) self.radioPageTotalLabel.setAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight) self.radioPageTotalLabel.setIndent(4) self.radioPageTotalLabel.setText('0') self.radioPageTitleLayout.addWidget(self.radioPageTotalLabel) self.radioPageLayout.addLayout(self.radioPageTitleLayout) self.radioListWidget = QtWidgets.QListWidget(self.radioPage) self.radioListWidget.setObjectName("radioListWidget") self.radioListWidget.setSortingEnabled(True) self.radioListWidget.setIconSize(QtCore.QSize(64, 64)) self.radioPageLayout.addWidget(self.radioListWidget) self.stackedWidget.addWidget(self.radioPage) # Playlist self.playlistWidget = QtWidgets.QListWidget(self.splitter) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.playlistWidget.sizePolicy().hasHeightForWidth()) self.playlistWidget.setSizePolicy(sizePolicy) self.playlistWidget.setObjectName("playlistWidget") self.centralLayout.addWidget(self.splitter) self.setCentralWidget(self.centralwidget) self.statusbar = QtWidgets.QStatusBar(self) self.statusbar.setObjectName("statusbar") self.setStatusBar(self.statusbar) self.albumsListItem = QtWidgets.QListWidgetItem(qta.icon('mdi.album'), '') self.artistsListItem = QtWidgets.QListWidgetItem(qta.icon('mdi.account'), '') self.playlistsListItem = QtWidgets.QListWidgetItem(qta.icon('mdi.playlist-music'), '') self.radiosListItem = QtWidgets.QListWidgetItem(qta.icon('mdi.music'), '') for item in [self.albumsListItem, self.artistsListItem, self.playlistsListItem, self.radiosListItem]: self.viewListWidget.addItem(item) self.splitter.setStretchFactor(1, 1) self.retranslate_ui() self.viewListWidget.currentRowChanged.connect(self.on_view_list_current_row_changed) self.viewListWidget.setCurrentRow(0) QtCore.QMetaObject.connectSlotsByName(self) self.viewListWidget.setFocus() def retranslate_ui(self): _translate = QtCore.QCoreApplication.translate self.setWindowTitle(_translate("MainWindow", "Playtypus")) self.positionLabel.setText(_translate("MainWindow", "01:43")) self.playAction.setText(_translate("MainWindow", "&Play")) self.playAction.setToolTip(_translate("MainWindow", "Play")) self.settingsAction.setText(_translate("MainWindow", "&Configure")) self.albumsListItem.setText(_translate("MainWindow", "Albums")) self.albumPageTitleLabel.setText(_translate("MainWindow", "Albums")) self.artistsListItem.setText(_translate("MainWindow", "Artists")) self.artistPageTitleLabel.setText(_translate("MainWindow", "Artists")) self.radiosListItem.setText(_translate("MainWindow", "Radio")) self.radioPageTitleLabel.setText(_translate("MainWindow", "Radio")) self.playlistsListItem.setText(_translate("MainWindow", "Playlists")) self.playlistPageTitleLabel.setText(_translate("MainWindow", "Playlists")) def on_menu_button_clicked(self): pos = self.mapToGlobal(self.menuButton.geometry().bottomRight()) pos.setX(pos.x() - self.mainMenu.geometry().width()) self.mainMenu.exec(pos) def on_view_list_current_row_changed(self, current_row): self.stackedWidget.setCurrentIndex(current_row) def update_album_total(self, value): self.albumPageTotalLabel.setText(str(value)) def update_artist_total(self, value): self.artistPageTotalLabel.setText(str(value)) def update_playlist_total(self, value): self.playlistPageTotalLabel.setText(str(value)) def update_radio_total(self, value): self.radioPageTotalLabel.setText(str(value))