4

我在 pyqt5 中嵌入 python vlc 以制作视频播放器。但我遇到一个问题,即当视频开始播放时,它需要整个任务栏缩略图仅显示其视频而不显示窗口屏幕中存在的其他项目。关闭视频后任务栏变成完全空白的白色,不显示任何内容。这是图片示例。1-演奏前 在此处输入图像描述

2.播放时(看没有按钮) 3.停止后在此处输入图像描述
在此处输入图像描述

我正在尝试通过

QWinThumbnailToolBar in self.videoframe.showEvent()

这是我的完整代码:

import sys
from PyQt5.QtWidgets import *
from PyQt5 import QtWinExtras 
import vlc

class Player(QMainWindow):
    """A simple Media Player using VLC and Qt
    """
    def __init__(self, master=None):
        QMainWindow.__init__(self, master)
        self.setWindowTitle("Media Player")
        self.mainframe=QFrame(self)
        self.setCentralWidget(self.mainframe)
        self.videoframe=QFrame(self.mainframe)
        self.videoframe.setGeometry(0,50,600,400)
        ##Call to set taskbar thumbnail
        self.videoframe.showEvent=self.setthumbnail
        self.instance = vlc.Instance()
        self.player = self.instance.media_player_new()
        self.player.set_hwnd(int(self.videoframe.winId()))
        self.media = self.instance.media_new('C:/Users/mishra/Downloads/Video/kyakar.mp4')
        self.player.set_media(self.media)
        button=QPushButton('Play',self)
        button.setStyleSheet('background:red')
        button.setGeometry(100,0,40,30)
        button.clicked.connect(lambda:[self.videoframe.show(),self.player.play()])
        button1=QPushButton('Close',self)
        button1.setStyleSheet('background:green')
        button1.setGeometry(200,0,40,30)
        button1.clicked.connect(self.onclose)
    def onclose(self):
        if self.player:
            self.player.stop()
        self.videoframe.hide()
    def setthumbnail(self,event):
        print('Shown')
        self.thumbbar =QtWinExtras.QWinThumbnailToolBar(self)
        self.thumbbar.setWindow(self.windowHandle())        
    
if __name__ == "__main__":
    app = QApplication(sys.argv)
    player = Player()
    player.show()
    player.resize(600, 450)
    sys.exit(app.exec_())

有没有办法做到这一点?

4

1 回答 1

0

我为您标记了我所做的更改。试试看:

import sys
from PyQt5.QtWidgets import *
from PyQt5 import QtWinExtras 
from PyQt5.QtWinExtras import QWinThumbnailToolBar, QWinThumbnailToolButton
import vlc   
                                         

class Player(QMainWindow):
    """A simple Media Player using VLC and Qt
    """
    def __init__(self, master=None):
        QMainWindow.__init__(self, master)
        
        self.setWindowTitle("Media Player")
        self.mainframe = QFrame(self)
        self.setCentralWidget(self.mainframe)
        
        self.videoframe = QFrame(self.mainframe)
#-        self.videoframe.setGeometry(0, 50, 600, 400)                               # ---
        self.videoframe.resize(640, 480)                                             # +++
        
# +++  vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv +++     
        # QWinThumbnailToolBar
        self.toolBar = QWinThumbnailToolBar(self)        

        # Prev, Play/Pause, Next
        self.toolBtnPrev = QWinThumbnailToolButton(self.toolBar)
        self.toolBtnPrev.setToolTip('Prev')
        self.toolBtnPrev.setIcon(self.style().standardIcon(QStyle.SP_MediaSkipBackward))
        self.toolBtnPrev.clicked.connect(self.set_prev)
        self.toolBar.addButton(self.toolBtnPrev)

        self.toolBtnControl = QWinThumbnailToolButton(self.toolBar)
        self.toolBtnControl.setToolTip('Play')                       
        self.toolBtnControl.setProperty('status', 0)
        self.toolBtnControl.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
        self.toolBtnControl.clicked.connect(self.set_control)
        self.toolBar.addButton(self.toolBtnControl)

        self.toolBtnNext = QWinThumbnailToolButton(self.toolBar)
        self.toolBtnNext.setToolTip('Next')
        self.toolBtnNext.setIcon(self.style().standardIcon(QStyle.SP_MediaSkipForward))
        self.toolBtnNext.clicked.connect(self.set_next)
        self.toolBar.addButton(self.toolBtnNext)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +++        
        
        
        # Call to set taskbar thumbnail
#-        self.videoframe.showEvent = self.setthumbnail                           # ---
        self.instance = vlc.Instance()
        self.player = self.instance.media_player_new()
        self.player.set_hwnd(int(self.videoframe.winId()))
        self.media = self.instance.media_new('Samonastrojka.avi')                 # !!! <---
        self.player.set_media(self.media)
        '''
        button = QPushButton('Play',self)
        button.setStyleSheet('background:red')
        button.setGeometry(100,0,40,30)
        button.clicked.connect(lambda:[self.videoframe.show(),self.player.play()])
        button1 = QPushButton('Close',self)
        button1.setStyleSheet('background:green')
        button1.setGeometry(200,0,40,30)
        button1.clicked.connect(self.onclose)
        
    def onclose(self):
        if self.player:
            self.player.stop()
        self.videoframe.hide()
        
    def setthumbnail(self,event):
        print('Shown')
        self.thumbbar = QtWinExtras.QWinThumbnailToolBar(self)
        self.thumbbar.setWindow(self.windowHandle())        
        '''
        
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    def set_prev(self):
        pass

    def set_next(self):
        pass

    def set_control(self):
        if self.toolBtnControl.property('status') == 0:
            self.toolBtnControl.setToolTip('Pause')
            self.videoframe.show()
            self.player.play()
            self.toolBtnControl.setProperty('status', 1)
            self.toolBtnControl.setIcon(self.style().standardIcon(QStyle.SP_MediaPause))
        else:
            self.toolBtnControl.setProperty('status', 0)
            self.toolBtnControl.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))        
            self.player.stop()
            self.toolBtnControl.setToolTip('Play')

    def showEvent(self, event):
        super(Player, self).showEvent(event)
        if not self.toolBar.window():
            self.toolBar.setWindow(self.windowHandle())
        
    
if __name__ == "__main__":
    app = QApplication(sys.argv)
    player = Player()
    player.show()
    player.resize(640, 480)
    sys.exit(app.exec_())

在此处输入图像描述

于 2020-11-30T02:43:09.333 回答