Adding Qframes and Matplotlib In python PyQt5

381 Views Asked by At

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 what output i am getting 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()
1

There are 1 best solutions below

0
On

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)

import sys
import vlc
from PyQt5 import QtCore, QtGui, QtWidgets

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtPrintSupport import *
 
class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        #this sets the size Maximum for the main Q Frame 
        self.setWindowState(QtCore.Qt.WindowMaximized)
        #this removes the title bar of the window
        self.setWindowFlag(Qt.FramelessWindowHint)
        self.move(0,0)


        #Main Q frame defined where the HBox layout is defined
        self.mainFrame = QFrame()
        #means defining it in central widget
        self.setCentralWidget(self.mainFrame)
        #HBox Layout
        t_lay_parent = QHBoxLayout()
        #used to move the frames inside to go more up down, right,left
        t_lay_parent.setContentsMargins(0, 0, 0, 315)
        #removes the spacing between the frames and makes it looks like that its just 1 stream
        t_lay_parent.setSpacing(0)
        
#########################################################Camera Frame 1###################################################################
        self.videoFrame = QFrame()
        QWidget.setGeometry (self, 100, 200, 1500, 1500)
        t_lay_parent.addWidget(self.videoFrame)
        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.videoFrame.winId())
        elif sys.platform == "win32": # for Windows
            self.videoPlayer.set_hwnd(self.videoFrame.winId())
        elif sys.platform == "darwin": # for MacOS
            self.videoPlayer.set_nsobject(int(self.videoFrame.winId()))

        self.videoPlayer.play()
##########################################################Camera Frame 2#################################################################

        
        #frame2
        self.videoFrame1 = QFrame()
        t_lay_parent.addWidget(self.videoFrame1)
        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.videoFrame1.winId())
        elif sys.platform == "win32": # for Windows
            self.videoPlayer1.set_hwnd(self.videoFrame1.winId())
        elif sys.platform == "darwin": # for MacOS
            self.videoPlayer1.set_nsobject(int(self.videoFrame1.winId()))

        self.videoPlayer1.play()
##########################################################################################################################################
        #adding layout inside Main Frame
        self.mainFrame.setLayout(t_lay_parent)

        #shows the Pyqt frame
        self.show()




if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setApplicationName("VLC Test")

    window = MainWindow()
    window.show()
    app.exec_()