I am trying to run a program with Python PyQt5 where I take ip's of 2 camera's and stream them live on my screen, but the stream is coming like so (check the 1st picture) like the one in the given picture both the steams are coming in the first half but What I really want them is to come in separate halves(check 2nd picture for better understanding) of the top layout of the code which is in horizontal layout, not together in just the 1st Half of the screen (also i am getting these black borders which I am not able to remove if anyone knows how it can be removed please do tell)
And after the video streams are in the top layout in the bottom layout I am trying to get a Graph and an empty widget which I could edit for later use.
Thanks in Advance
Click here to see my desired output(what i am actually trying to get)
#this is my main window code#
import sys
import vlc
import subprocess
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import*
from PyQt5.QtWebEngineWidgets import*
from PyQt5.QtPrintSupport import*
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Final App")
self.setGeometry(350,150,400,400)
self.UI()
#calling the UI fucntion which contains the layouts
def UI(self):
self.mainLayout=QVBoxLayout()#main layout is in Vertical Layout
self.topLayout=QHBoxLayout()#top layout is in Horizontal layout
self.bottomLayout=QHBoxLayout()#btm layout is in also in horizontal layout
self.topLayout.setContentsMargins(0, 0, 0, 0)
#self.topLayout.setSpacing(0)
#adding the top and bottom layout inside main layout
self.mainLayout.addLayout(self.topLayout)
self.mainLayout.addLayout(self.bottomLayout)
#assigning variables to different widgets that can be added later
self.videoFrame1 = QFrame()
self.videoFrame2 = QFrame()
#code here to add graph#
#graphcode=graph#
self.text=QLabel("A widget that I can Edit LATER ")
########################################################video player 1###################################################################################
self.videoFrame1 = QFrame()
#QWidget.setGeometry (self,100, 200, 1000, 500)
self.videoFrame1.setGeometry(QtCore.QRect(100, 100, 100, 200))
self.topLayout.addWidget(self.videoFrame1)
self.vlcInstance = vlc.Instance(['--video-on-top'])
self.videoPlayer = self.vlcInstance.media_player_new()
self.videoPlayer = self.vlcInstance.media_player_new()
self.videoPlayer.video_set_mouse_input(False)
self.videoPlayer.video_set_key_input(False)
#self.videoPlayer.set_mrl("rtsp://admin:[email protected]:554/cam/realmonitor?channel=1&subtype=0", "network-caching=300")
self.videoPlayer.set_mrl("rtsp://admin:[email protected]:554/cam/realmonitor?channel=1&subtype=0", "network-caching=200")
self.videoPlayer.audio_set_mute(True)
if sys.platform.startswith('linux'): # for Linux using the X Server
self.videoPlayer.set_xwindow(self.videoFrame1.winId())
elif sys.platform == "win32": # for Windows
self.videoPlayer.set_hwnd(self.videoFrame1.winId())
elif sys.platform == "darwin": # for MacOS
self.videoPlayer.set_nsobject(int(self.videoFrame1.winId()))
self.videoPlayer.play()
#########################################video player 2############################################################################################
#frame2
self.videoFrame2 = QFrame()
self.topLayout.addWidget(self.videoFrame2)
self.vlcInstance1 = vlc.Instance(['--video-on-top'])
self.videoPlayer1 = self.vlcInstance1.media_player_new()
self.videoPlayer1 = self.vlcInstance1.media_player_new()
self.videoPlayer1.video_set_mouse_input(False)
self.videoPlayer1.video_set_key_input(False)
#self.videoPlayer1.set_mrl("rtsp://admin:[email protected]:554/cam/realmonitor?channel=1&subtype=0", "network-caching=300")
self.videoPlayer1.set_mrl("rtsp://admin:[email protected]:554/cam/realmonitor?channel=1&subtype=0", "network-caching=200")
self.videoPlayer1.audio_set_mute(True)
if sys.platform.startswith('linux'): # for Linux using the X Server
self.videoPlayer1.set_xwindow(self.videoFrame2.winId())
elif sys.platform == "win32": # for Windows
self.videoPlayer1.set_hwnd(self.videoFrame2.winId())
elif sys.platform == "darwin": # for MacOS
self.videoPlayer1.set_nsobject(int(self.videoFrame2.winId()))
self.videoPlayer1.play()
###########################################################################################################
#calling top layout
self.toplayout()
#calling bottom layout
self.bottomlayout()
#setting main layout
self.setLayout(self.mainLayout)
self.show()
def toplayout(self):
self.topLayout.setContentsMargins(10,10,20,20)
self.topLayout.addWidget(self.
videoFrame1)
self.topLayout.addWidget(self.videoFrame2)
def bottomlayout(self):
self.bottomLayout.setContentsMargins(150,40,100,80)
self.bottomLayout.addWidget(self.raddar)
self.bottomLayout.addWidget(self.button2)
def main():
App= QApplication(sys.argv)
window=Window()
sys.exit(App.exec())
if __name__ == '__main__':
main()
this is my other folder having a matplotlib code:---
#this is another folder having my garph which i want to call in my main window#
import matplotlib.pyplot as plt
def UI():
plt.figure()
# Set x-axis range
plt.xlim((-4,4))
# Set y-axis range
plt.ylim((0,8))
#setting background color
ax = plt.axes()
ax.set_facecolor('black')
# Draw lines to split quadrants
plt.plot([0,0],[0,8], linewidth=3, color='blue' )
plt.plot([-4,4],[4,4], linewidth=3, color='blue' )
plt.title('Quadrant plot')
plt.show()
UI()
hey so I was able to work something out with the code that I already had so I am going to stream the videos on pyqt only and use subprocess to call the .exe file which I made using MATLAB so here you go do have a look.(here I haven't called the Subprocess right now)