【问题标题】:How to make vlc video go fulllscreen in pyqt5?如何在pyqt5中使vlc视频全屏显示?
【发布时间】:2021-04-24 06:45:44
【问题描述】:

我正在尝试使用 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, 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, 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, 469, 241, 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_())

我做错了什么吗?如果是这样,请告诉我。

【问题讨论】:

    标签: python pyqt5 fullscreen vlc video-player


    【解决方案1】:

    我(几乎)对 PyQT5 一无所知,但如果我指的是文档,则调用 showFullScreen() 只会影响 windows,因此您必须先将框架与主窗口分离。

    def go_fullscreen(self):
        self.frame.setParent(None)
        self.frame.showFullScreen()
    

    【讨论】:

    • 非常感谢您的即时回复。有效。我刚刚问了最后一个问题,我们怎样才能把它恢复到原来的状态?再次感谢您的回复。
    • 要从全屏模式返回,请致电showNormal()。我认为您需要 reparent 框架。可能你需要installEventFilter() 来捕捉Esc 按键或其他任何东西。
    • 也许这个link 可以帮助你。此答案的作者是编辑您帖子的人!
    • @Just_A_Coder self.frame.setParent(self.centralWidget); self.show();请注意,您没有使用任何 layout manager(这通常不是一个好主意),因此您需要手动重置几何图形(这是不使用布局非常糟糕的原因之一选择)。另外,避免尝试编辑 pyuic 文件的输出,这是另一种不好的做法。
    • 成功了。感谢所有帮助我解决这个问题的人。谢谢你的建议musicamante。我期待在 pyqt5 中使用 Layouts,并且我会尽量不要从 pyuic 文件的输出中进行编辑。再次感谢所有支持我的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多