Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在PyQt5中关闭/打开vlc播放器后使用QWinThumbnailToolBar恢复任务栏缩略图_Python_Qt_Pyqt5_Vlc_Python Vlc - Fatal编程技术网

Python 如何在PyQt5中关闭/打开vlc播放器后使用QWinThumbnailToolBar恢复任务栏缩略图

Python 如何在PyQt5中关闭/打开vlc播放器后使用QWinThumbnailToolBar恢复任务栏缩略图,python,qt,pyqt5,vlc,python-vlc,Python,Qt,Pyqt5,Vlc,Python Vlc,我正在pyqt5中嵌入python vlc以制作视频播放器。但我有一个问题,即当视频开始播放时,需要整个任务栏缩略图才能仅显示其视频,而不显示窗口屏幕中的其他项目。关闭视频后,任务栏将变为完全空白的白色,不显示任何内容。以下是图片示例。 比赛前1-4分钟 2.播放时(看没有按钮) 3.停车后 我正试图通过以下方式恢复 QWinThumbnailToolBar in self.videoframe.showEvent() 这是我的完整代码: import sys from PyQt5.QtW

我正在pyqt5中嵌入python vlc以制作视频播放器。但我有一个问题,即当视频开始播放时,需要整个任务栏缩略图才能仅显示其视频,而不显示窗口屏幕中的其他项目。关闭视频后,任务栏将变为完全空白的白色,不显示任何内容。以下是图片示例。 比赛前1-4分钟

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_())


有什么办法可以做到这一点吗?

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

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_())
导入系统 从PyQt5.QtWidgets导入* 从PyQt5导入QtWinExtras 从PyQt5.QtWinExtras导入QWinThumbnailToolBar,QWinThumbnailToolButton 进口vlc 类播放器(QMainWindow): “”“使用VLC和Qt的简单媒体播放器 """ def uuu init uuu(self,master=None): QMainWindow.\uuuuu init\uuuuuu(自,主) self.setWindowTitle(“媒体播放器”) self.mainframe=QFrame(self) self.setCentralWidget(self.mainframe) self.videoframe=QFrame(self.mainframe) #-self.videoframe.setGeometry(0,50600400)#--- self.videoframe.resize(640480)#+++ #+++VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV++ #QWinThumbnailToolBar self.toolBar=QWinThumbnailToolBar(self) #上一个,播放/暂停,下一个 self.toolBtnPrev=QWinThumbnailToolButton(self.toolBar) self.toolBtnPrev.setToolTip('Prev') self.toolBtnPrev.setIcon(self.style().standardIcon(QStyle.SP_MediaSkipBackward)) self.toolBtnPrev.clicked.connect(self.set\u prev) self.toolBar.addButton(self.toolBtnPrev) self.toolbtcontrol=QWinThumbnailToolButton(self.toolBar) self.toolbtcontrol.setToolTip('Play') self.toolbtcontrol.setProperty('status',0) self.toolbtcontrol.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) self.toolbtcontrol.clicked.connect(self.set\u控件) self.toolBar.addButton(self.toolbtcontrol) self.toolbtnext=QWinThumbnailToolButton(self.toolBar) self.toolbtnext.setToolTip('下一步') self.toolbtnext.setIcon(self.style().standardIcon(QStyle.SP_MediaSkipForward)) self.toolbtnext.clicked.connect(self.set\u下一步) self.toolBar.addButton(self.toolbtnext) # +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +++ #调用以设置任务栏缩略图 #-self.videoframe.showEvent=self.set缩略图#--- self.instance=vlc.instance() self.player=self.instance.media\u player\u new() self.player.set\uhwnd(int(self.videoframe.winId()))
self.media=self.instance.media_new('Samonastrojka.avi')#!!!你没有正确理解我的观点。我不想在任务栏中显示这些按钮(播放、下一个、上一个),但我希望在第一张图片中显示我的红色和绿色按钮。因为当播放视频时,这些按钮已经出现在窗口中,那么为什么它没有显示在任务栏缩略图中。第二张当我单击“关闭”按钮时,视频停止并隐藏帧,但任务栏的缩略图仍然是空白的,看看我的第三张图片,你找不到那些红色和绿色的按钮。我的主要观点是VLC捕获了整个缩略图部分,不允许窗口中显示其他内容@尼克