Как добавить QPixmap для кнопки «Дисплей и управление» в PyQT4 - PullRequest
0 голосов
/ 11 ноября 2018

Я только начал pyqt4. Мой пользовательский интерфейс имеет две вкладки Face и Human. Когда я нажимаю вкладку «Лицо» или «Человек», я должен видеть область отображения, отображающую изображения с веб-камеры слева, и блок группы управления справа (включая кнопки, переключатели и т. Д.).

Я не знаю, как сделать весь интерфейс, но готовлю отдельные части. Мой существующий код выглядит следующим образом.

Как мне продолжить?

import sys
import cv2
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Thread(QThread):
    changePixmap = pyqtSignal(QImage)

    def run(self):
        cap = cv2.VideoCapture(0)
        while True:
            ret, frame = cap.read()
            if ret:
                rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                convertToQtFormat = QImage(rgbImage.data, rgbImage.shape[1], rgbImage.shape[0], QImage.Format_RGB888)
                p = convertToQtFormat.scaled(640, 480, Qt.KeepAspectRatio)
                self.changePixmap.emit(p)


class Display(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    @pyqtSlot(QImage)
    def setImage(self, image):
        self.label.setPixmap(   .fromImage(image))

    def initUI(self):
        self.setWindowTitle(self.title)        
        # create a label
        self.label = QLabel(self)
        self.label.move(280, 120)
        self.label.resize(640, 480)
        th = Thread(self)
        th.changePixmap.connect(self.setImage)
        th.start()

class Human(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setLayout(QGridLayout())

        #Add display

        #Add control components
        layout = QVBoxLayout()
        self.b1 = QPushButton("Button1")
        self.b1.setCheckable(True)
        self.b1.toggle()
        self.b1.clicked.connect(lambda:self.whichbtn(self.b1))
        self.b1.clicked.connect(self.btnstate)
        layout.addWidget(self.b1)

    def btnstate(self):
      if self.b1.isChecked():
         print "button pressed"
      else:
         print "button released"

    def whichbtn(self,b):
      print "clicked button is "+b.text()

class Face(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setLayout(QGridLayout())

        #Add display

        #Add control components
        layout = QVBoxLayout()
        self.b1 = QPushButton("Button1")
        self.b1.setCheckable(True)
        self.b1.toggle()
        self.b1.clicked.connect(lambda:self.whichbtn(self.b1))
        self.b1.clicked.connect(self.btnstate)
        layout.addWidget(self.b1)
    def btnstate(self):
      if self.b1.isChecked():
         print "button pressed"
      else:
         print "button released"

    def whichbtn(self,b):
      print "clicked button is "+b.text()

class Page1(QTabWidget):
    def __init__(self, parent=None):
        super(Page1, self).__init__(parent)
        self.face = Face()
        self.human = Human()
        self.addTab(self.face, "Face")
        self.addTab(self.human, "Human")

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setGeometry(200, 200, 800, 600)
        self.startPage1()

    def startPage1(self):
        x = Page1(self)
        self.setWindowTitle("Face & Human")
        self.setCentralWidget(x)
        self.show()

def main():
    app = QApplication(sys.argv)
    main = MainWindow()
    main.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

Пользовательский интерфейс, который мне нравится видеть, выглядит следующим образом.

enter image description here

...