QFrame 内的 Vlc 播放器

Vlc player inside QFrame

我想将 VLC 视频播放器放在一个框架内。 每次我 运行 它都会在新的 window 中打开 我怎样才能把它放在框架里

这是代码

import sys

import os.path

from PyQt5.QtCore import Qt, QTimer

from PyQt5.QtGui import QPalette, QColor

from PyQt5.QtWidgets import QMainWindow, QWidget, QFrame, QSlider, QHBoxLayout, QPushButton, \
    QVBoxLayout, QAction, QFileDialog, QApplication

import vlc

from PyQt5 import QtCore, QtGui, QtWidgets

class Player(QMainWindow):


    def __init__(self, master=None):

        QMainWindow.__init__(self, master)

        self.setWindowTitle("Media Player")

        # creating a basic vlc instance

        self.instance = vlc.Instance()

        # creating an empty vlc media player

        self.mediaplayer = self.instance.media_player_new()

        self.isPaused = False



         ##########video frame

        self.videoframe = QFrame(self)

        self.videoframe.setGeometry(QtCore.QRect(210, 70, 391, 291))

        self.videoframe.setFrameShape(QtWidgets.QFrame.Box)

        self.videoframe.setFrameShadow(QtWidgets.QFrame.Raised)

        self.vboxlayout = QVBoxLayout()

        self.vboxlayout.addWidget(self.videoframe)




        ######### the vlc

        self.filename='C:/Users/Kikomi/Pictures/Camera Roll/kk.mp4'

        self.media = self.instance.media_new(self.filename)

        self.mediaplayer.set_media(self.media)

        self.mediaplayer.play()




if __name__ == "__main__":

    app = QApplication(sys.argv)

    player = Player()

    player.show()

    player.resize(640, 480)

    if sys.argv[1:]:

        player.OpenFile(sys.argv[1])

    sys.exit(app.exec_())

您必须将 QFramewinId() 传递给媒体播放器,方法取决于每个 OS,如下所示:

import sys

import vlc

from PyQt5 import QtCore, QtGui, QtWidgets


class Player(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(Player, self).__init__(parent)
        self.setWindowTitle("Media Player")
        # creating a basic vlc instance
        self.instance = vlc.Instance()
        self.mediaplayer = self.instance.media_player_new()
        ##########video frame
        self.videoframe = QtWidgets.QFrame(
            frameShape=QtWidgets.QFrame.Box, frameShadow=QtWidgets.QFrame.Raised
        )

        <b>if sys.platform.startswith("linux"):  # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":  # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":  # for MacOS
            self.mediaplayer.set_nsobject(self.videoframe.winId())</b>

        central_widget = QtWidgets.QWidget()
        self.setCentralWidget(central_widget)
        lay = QtWidgets.QVBoxLayout(central_widget)
        lay.addWidget(self.videoframe)

        filename = "/path/of/your/video.mp4"
        media = self.instance.media_new(filename)
        self.mediaplayer.set_media(media)
        self.mediaplayer.play()


if __name__ == "__main__":

    app = QtWidgets.QApplication(sys.argv)

    player = Player()
    player.show()
    player.resize(640, 480)

    sys.exit(app.exec_())