Example #1
0
class NowPlayingWidget(QtWidgets.QGraphicsView):
    def __init__(self, media_player):
        super().__init__()
        self._media_player = media_player
        self._media_player.currentMediaChanged.connect(self.change_title)

        self.setScene(QtWidgets.QGraphicsScene(self))
        self.init_ui()

    def set_opacity(self, value):
        self._opacity = value
        self.overlay.setOpacity(value)

    def init_ui(self):
        self.main_layout = QtWidgets.QVBoxLayout()
        self.main_layout.setContentsMargins(0, 0, 0, 0)
        self.setFixedHeight(200)

        self.now_playing_visual = NowPlayingVisual(self._media_player, self)
        self.main_layout.addWidget(self.now_playing_visual)

        self.setBackgroundBrush(QtGui.QBrush(QtCore.Qt.black))

        self.video_item = QGraphicsVideoItem()
        self.video_item.setGraphicsEffect(QtWidgets.QGraphicsBlurEffect())
        self.video_item.setAspectRatioMode(
            QtCore.Qt.KeepAspectRatioByExpanding)
        self._media_player.setVideoOutput(self.video_item)
        self.scene().addItem(self.video_item)

        self.overlay = QtWidgets.QGraphicsRectItem(0, 0, 0, 0, self.video_item)
        self.overlay.setBrush(QtGui.QBrush(QtCore.Qt.black))
        self.set_opacity(0.8)

        self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)

        self.setStyleSheet('border: 0px;')

        self.setLayout(self.main_layout)

    def change_title(self, media):
        data = self._media_player.nowplaying()
        if data:
            self.now_playing_visual.set_title(data)

    def resizeEvent(self, event):
        self.video_item.setSize(QtCore.QSizeF(self.size()))
        rect = QtCore.QRectF(0, 0,
                             self.video_item.size().width(),
                             self.video_item.size().height())
        self.overlay.setRect(rect)