3

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_()) 
1
  • If you have another question then you must create a new post. Commented Feb 19, 2020 at 21:32

1 Answer 1

5

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_())
Sign up to request clarification or add additional context in comments.

Comments