在python PyQt5中添加Qframe和Matplotlib

2024-07-03 06:20:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python PyQt5运行一个程序,在这个程序中,我拍摄了两个摄像头的ip,并在我的屏幕上实时播放,但是播放流是这样的(查看第一张图片),就像给定图片中的一样。两个播放流都在前半部分播放,但我真正想要的是分开播放(查看第二张图片以便更好地理解)水平布局中的代码顶部布局,不在一起仅在屏幕的前半部分(我也得到了这些黑色边框,我无法删除,如果有人知道如何删除,请告诉
在视频流处于顶部布局和底部布局之后,我试图获得一个图形和一个空的小部件,我可以编辑它以供以后使用

提前谢谢

Click here to see what output i am gettingClick 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:admin123@192.168.1.250:554/cam/realmonitor?channel=1&subtype=0", "network-caching=300")
        self.videoPlayer.set_mrl("rtsp://admin:admin123@192.168.1.251: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:admin123@192.168.1.251:554/cam/realmonitor?channel=1&subtype=0", "network-caching=300")
        self.videoPlayer1.set_mrl("rtsp://admin:admin123@192.168.1.250: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()

这是我的另一个文件夹,其中包含matplotlib代码:——

#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()

Tags: fromimportselfmainvideosyspltpyqt5
1条回答
网友
1楼 · 发布于 2024-07-03 06:20:27

嘿,所以我能够用我已经有的代码解决一些问题,所以我将仅在pyqt上流式传输视频,并使用子进程调用我使用MATLAB制作的.exe文件,所以在这里,您可以看一看。(这里我现在没有调用子进程)

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:admin123@192.168.1.250:554/cam/realmonitor?channel=1&subtype=0", "network-caching=300")
        self.videoPlayer.set_mrl("rtsp://admin:admin123@192.168.1.251: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:admin123@192.168.1.251:554/cam/realmonitor?channel=1&subtype=0", "network-caching=300")
        self.videoPlayer1.set_mrl("rtsp://admin:admin123@192.168.1.250: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_()

相关问题 更多 >