如何解决如何在pyqt5中使vlc视频全屏显示?
我正在尝试使用 python-vlc 和 pyqt5 开发一个简单的视频播放器。但问题是我无法让它全屏显示。当我点击全屏按钮 self.frame.showFullScreen() 什么都不做。我什至尝试了here.
发布的解决方案但不幸的是它没有帮助我。我对 PyQt5 和 VLC 有点陌生,但我无法解决。
这是我的代码:
from PyQt5 import QtCore,QtGui,QtWidgets
import vlc
import time
import os
import platform
class Ui_MainWindow(QtWidgets.QWidget):
def setupUi(self,MainWindow):
MainWindow.setobjectName("MainWindow")
MainWindow.resize(800,600)
font = QtGui.QFont()
font.setPointSize(15)
MainWindow.setFont(font)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setobjectName("centralwidget")
self.frame = QtWidgets.qframe(self.centralwidget)
self.frame.setGeometry(QtCore.QRect(0,801,421))
self.frame.setStyleSheet("background-color: rgb(28,29,32);")
self.frame.setFrameShape(QtWidgets.qframe.StyledPanel)
self.frame.setFrameShadow(QtWidgets.qframe.Raised)
self.frame.setobjectName("frame")
self.label = QtWidgets.QLabel(self.frame)
self.label.setGeometry(QtCore.QRect(0,791,421))
font = QtGui.QFont()
font.setPointSize(20)
self.label.setFont(font)
self.label.setStyleSheet("QLabel{\n"
" color: rgb(255,255,255)\n"
"}")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setobjectName("label")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(70,469,241,91))
self.pushButton.setobjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(490,91))
self.pushButton_2.setobjectName("pushButton_2")
MainWindow.setCentralWidget(self.centralwidget)
self.instance = vlc.Instance()
self.mediaplayer = vlc.MediaPlayer()
self.pushButton.clicked.connect(self.Load_Video)
self.pushButton_2.clicked.connect(self.go_fullscreen)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self,MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setwindowTitle(_translate("MainWindow","MainWindow"))
self.label.setText(_translate("MainWindow","Click Load Video to play your favourite videos !"))
self.pushButton.setText(_translate("MainWindow","Load Video"))
self.pushButton_2.setText(_translate("MainWindow","Fullscreen"))
def Load_Video(self):
"""Open a media file in a MediaPlayer
"""
dialog_txt = "Choose Media File"
filename = QtWidgets.QFileDialog.getopenFileName(self,dialog_txt,os.path.expanduser('~'))
if not filename:
return
# getopenFileName returns a tuple,so use only the actual file name
self.media = self.instance.media_new(filename[0])
# Put the media in the media player
self.mediaplayer.set_media(self.media)
# Set the title of the track as window title
_translate = QtCore.QCoreApplication.translate
MainWindow.setwindowTitle(_translate("MainWindow",self.media.get_Meta(0)))
if platform.system() == "Linux": # for Linux using the X Server
self.mediaplayer.set_xwindow(int(self.frame.winId()))
elif platform.system() == "Windows": # for Windows
self.mediaplayer.set_hwnd(int(self.frame.winId()))
elif platform.system() == "Darwin": # for MacOS
self.mediaplayer.set_nsobject(int(self.frame.winId()))
self.mediaplayer.play()
time.sleep(2)
def go_fullscreen(self):
self.frame.showFullScreen() # This is the part where the code doesn't work,it does nothing.
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
我做错了什么吗?如果是这样,请告诉我。
解决方法
我(几乎)对 PyQT5 一无所知,但如果我指的是文档,调用 showFullScreen()
只会影响 windows,因此您必须先将框架与主窗口分离.
def go_fullscreen(self):
self.frame.setParent(None)
self.frame.showFullScreen()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。