Python 如何在PyQt5中关闭/打开vlc播放器后使用QWinThumbnailToolBar恢复任务栏缩略图
我正在pyqt5中嵌入python vlc以制作视频播放器。但我有一个问题,即当视频开始播放时,需要整个任务栏缩略图才能仅显示其视频,而不显示窗口屏幕中的其他项目。关闭视频后,任务栏将变为完全空白的白色,不显示任何内容。以下是图片示例。 比赛前1-4分钟 2.播放时(看没有按钮)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
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捕获了整个缩略图部分,不允许窗口中显示其他内容@尼克