2016-11-06 11 views
1

我想显示两个从“videoFrame”中捕捉的视频,但现在它只显示self.central_widget.setCurrentWidget(self.videoFrame2)。有没有人有任何想法如何解决这个问题?PyQt4:如何将两个对象添加到中央控件并显示两个视频

(注:我使用PyQt4的和OpenCV3库)

class MyDialog(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(MyDialog, self).__init__(parent) 

     self.left = 700 
     self.top = 400 
     self.width = 1920 
     self.height = 1080 

     self.setWindowTitle('Sender') 
     self.setGeometry(self.left, self.top, self.width, self.height) 
     self.setFixedSize(1920,1080) 

     self.videoFrame = ImageWidget() 
     self.videoFrame2 = ImageWidget2() 

     self.central_widget = QtGui.QStackedWidget() 
     self.setCentralWidget(self.central_widget) 
     self.central_widget.addWidget(self.videoFrame) 
     self.central_widget.setCurrentWidget(self.videoFrame) 
     self.central_widget.addWidget(self.videoFrame2) 
     self.central_widget.setCurrentWidget(self.videoFrame2) 

     self.timer = QtCore.QTimer(self) 
     self.timer.timeout.connect(self.updateImage) 
     self.timer.start(30) 
     self.capture1 = cv2.VideoCapture(0) 
     self.capture2 = cv2.VideoCapture(1) 

    def updateImage(self): 
     _, img = self.capture1.read() 
     height, width, bpc = img.shape 
     bpl = bpc * width 
     image = QtGui.QImage(img.data, width, height, bpl, QtGui.QImage.Format_RGB888) 
     pixmap2 = image.scaled(300, 300, QtCore.Qt.KeepAspectRatio) 
     self.videoFrame.setImage(pixmap2) 

     _, img0 = self.capture2.read() 
     height, width, bpc = img0.shape 
     bpl = bpc * width 
     image2 = QtGui.QImage(img0.data, width, height, bpl, QtGui.QImage.Format_RGB888) 
     pixmap2 = image2.scaled(300, 300, QtCore.Qt.KeepAspectRatio) 
     self.videoFrame2.setImage(pixmap2) 

class ImageWidget(QtGui.QWidget): 
    def __init__(self,parent=None): 
     super(ImageWidget,self).__init__(parent) 
     self.image=None 

    def setImage(self,image): 
     self.image=image 
     sz=image.size() 
     self.setMinimumSize(sz) 
     self.update() 

    def paintEvent(self,event): 
     qp=QtGui.QPainter() 
     qp.begin(self) 
     if self.image: 
      qp.drawImage(QtCore.QPoint(150,150),self.image) 
     qp.end() 

    # enter code here 

class ImageWidget2(QtGui.QWidget): 
    def __init__(self,parent=None): 
     super(ImageWidget2,self).__init__(parent) 
     self.image=None 

    def setImage(self,image): 
     self.image=image 
     sz=image.size() 
     self.setMinimumSize(sz) 
     self.update() 

    def paintEvent(self,event): 
     qp=QtGui.QPainter() 
     qp.begin(self) 
     if self.image: 
      qp.drawImage(QtCore.QPoint(450,450),self.image) 
     qp.end() 
+0

请更清楚地说明问题所在。 – ekhumoro

+0

它应该在我的GUI上显示2个视频,但它只有1个视频显示在gui上。我如何解决这个问题 –

+0

我试图一次添加两个视频到centralWidget,但它只显示current.centralWidget。我想一次显示两个视频。 –

回答

1

一个QStackedWidget将放在彼此的顶部部件。如果您想要并排显示小部件,请使用QHBoxLayout

class MyDialog(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(MyDialog, self).__init__(parent) 
     ... 

     # self.central_widget = QtGui.QStackedWidget() 
     # self.setCentralWidget(self.central_widget) 
     # self.central_widget.addWidget(self.videoFrame) 
     # self.central_widget.setCurrentWidget(self.videoFrame) 
     # self.central_widget.addWidget(self.videoFrame2) 
     # self.central_widget.setCurrentWidget(self.videoFrame2) 

     widget = QtGui.QWidget(self) 
     layout = QtGui.QHBoxLayout(widget) 
     layout.addWidget(self.videoFrame) 
     layout.addWidget(self.videoFrame2) 
     self.setCentralWidget(widget) 
+0

它的工作。多谢。你让我更了解 –

相关问题