Как можно видоизменять виджеты (их структуру)

На данный момент я пытаюсь разобраться в том как можно придать дизайну виджетов немного современности, ничего в результате не смог найти, только то, что можно улучшать дизайн, используя html. Помогите разобраться.

from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, 
    QHBoxLayout, QVBoxLayout, QLabel, QSlider, QStyle, QSizePolicy, QFileDialog) 
import sys
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtGui import QIcon
from PyQt5 import QtCore
from PyQt5 import Qt


class Window(Qt.QWidget):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("PyQt5 Media Player")
        self.setGeometry(350, 100, 700, 500)
        self.setWindowIcon(QIcon('player.png'))
        self.setStyleSheet(""" background-color: #000; """)

        self.init_ui()
        self.show()

    def init_ui(self):
        self.menubar = Qt.QMenuBar()
        self.menubar.setStyleSheet("""color: #fff;
                                """ )

        self.menufile = self.menubar.addMenu('&File')
        self.menufile.setStyleSheet("""menuFile:hover {
                                    background-color: silver;
                                    }""")

        action_1 = self.menufile.addAction('Open File')
        action_1.triggered.connect(self.open_file)

        #create media player object
        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)

        #create videowidget object
        self.videowidget = QVideoWidget()

        #create open button

        #create button for playing
        self.playBtn = QPushButton()
                      # 1. installEventFilter
    
    
        self.playBtn.setEnabled(False)
        self.playBtn.setIcon(QIcon('F:/img_4_python/15.png'))
        self.playBtn.clicked.connect(self.play_video)

        #create slider
        self.slider = QSlider(QtCore.Qt.Horizontal)
        self.slider.installEventFilter(self)                         # 2. 
        #installEventFilter 
        self.slider.setRange(0,0)
        self.slider.sliderMoved.connect(self.set_position)

        #create label
        self.label = QLabel()
        self.label.setSizePolicy(QSizePolicy.Preferred, 
            QSizePolicy.Maximum)

        #create hbox layout
        window = QWidget()
        hboxLayout = QHBoxLayout()
        hboxLayout.setContentsMargins(0,0,0,0)

        #set widgets to the hbox layout
        hboxLayout.addWidget(self.playBtn)
        hboxLayout.addWidget(self.slider)

        #create vbox layout
        vboxLayout = QVBoxLayout()
        vboxLayout.addWidget(self.videowidget)
        vboxLayout.setMenuBar(self.menubar)
        vboxLayout.addLayout(hboxLayout)
        vboxLayout.addWidget(self.label)

        self.setLayout(vboxLayout)

        self.mediaPlayer.setVideoOutput(self.videowidget)

        #media player signals
        self.mediaPlayer.stateChanged.connect(self.mediastate_changed)
        self.mediaPlayer.positionChanged.connect(self.position_changed)
        self.mediaPlayer.durationChanged.connect(self.duration_changed)

    def mouseMoveEvent(self, event):
        print(event.y())

        if self.isFullScreen() == False and not self.isMaximized() == True:
            if event.y() > 400:
                print('b')
                self.playBtn.show()
                self.slider.show()
            elif event.y() < 400 and event.y() > 22:
                print('a')
                self.playBtn.hide()
                self.slider.hide()
        elif self.isMaximized() == True:
            if event.y() > 770:
                print('q')
                self.playBtn.show()
                self.slider.show()
            elif event.y() < 770 and event.y() > 40:
                print('n')
                if self.mediaPlayer.state() != 0:
                    self.playBtn.hide()
                    self.slider.hide()
                    self.menubar.hide()

            elif event.y() < 40:
                print('i')
                self.menubar.show()

    # +++ 
    def eventFilter(self, source, event):                                   # 
        #1. installEventFilter
        if source == self.slider and event.type() == QtCore.QEvent.Enter:
            if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
               app.instance().setOverrideCursor(
               QtCore.Qt.PointingHandCursor)
        elif source == self.slider and event.type() == QtCore.QEvent.Leave:
            if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
                app.instance().restoreOverrideCursor()        
        return super().eventFilter(source, event)


    def open_file(self):
        filename, _ = QFileDialog.getOpenFileName(self, "Open Video")
        if filename != '': 
            self.mediaPlayer.setMedia(QMediaContent
                (QtCore.QUrl.fromLocalFile(filename)))
            self.playBtn.setEnabled(True)

    def play_video(self):
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.mediaPlayer.pause()

        else:
            self.mediaPlayer.play()

    def mediastate_changed(self, state):
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.playBtn.setIcon(QIcon('F:/img_4_python/81.jpg'))
        else:
            self.playBtn.setIcon(QIcon('F:/img_4_python/19.jpg'))

    def position_changed(self, position):
        self.slider.setValue(position)

    def duration_changed(self, duration):
        self.slider.setRange(0, duration)

    def set_position(self, position):
        self.mediaPlayer.setPosition(position)

    def handle_errors(self):
        self.playBtn.setEnabled(False)
        self.label.setText("Error: " + self.mediaPlayer.errorString())


app = QApplication(sys.argv)
window = Window()
sys.exit(app.exec_())

Слайдер который хотел получить

Но я не знаю возможно ли эта вообще в PyQt5


Ответы (1 шт):