I would like to put the VLC video player inside a frame. every time I run it it opens in a new window how can I put it inside the frame
here is the code
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_())
You have to pass the winId()
of the QFrame
to the mediaplayer, and the method depends on each OS as I show below:
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
)
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())
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_())