属性错误:“bool”对象没有属性“signal”

2024-09-25 08:39:10 发布

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

我正在开发一个PyQT应用程序,但我无法在其框架中实现CV类。这是有问题的类,以及错误的来源。在

class ShowVid(QObject):
    signal = pyqtSignal(QImage)        

    def __init__(self):
        super().__init__()

    @pyqtSlot()
    def startVideo(self):
        camera_port = 0
        camera = cv2.VideoCapture(camera_port)          
        run_video = True
        while run_video:
            ret, image = camera.read()
            color_swapped_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

            height, width, _ = color_swapped_image.shape
            qt_image = QImage(color_swapped_image.data,
                              width,
                              height,
                              color_swapped_image.strides[0],
                              QImage.Format_RGB888)

            self.signal.emit(qt_image)

我收到错误:

^{pr2}$

使用Main和VidViewer类中的代码进行更新。VidViewer类从相机捕获的帧中绘制图像。帧由setImage插槽刷新。主类用布局构造小部件并运行应用程序。在

class VidViewer(QWidget):
    def __init__(self):
        super().__init__()
        self.layout = QGridLayout()
        self.image = QImage()        
        self.initUI()

    def paintEvent(self, _):
        print("paint image")
        painter = QPainter(self)
        painter.drawImage(0, 0, self.image)
        self.paintImage = QImage()

    def initUI(self):
        print("INIT UI")  
        #image = self.image
        self.push_button = QPushButton("Start")

        self.push_button.clicked.connect(ShowVid.startVideo)

        self.layout.addWidget(self.push_button, 0, 0,1,1) 

        self.setLayout(self.layout) 
        self.setWindowTitle('Test')
        self.show()

    @pyqtSlot(QImage)
    def setImage(self, image):
        self.image = image
        self.paintEvent()


class Main(QMainWindow):
    def __init__(self):
        super().__init__()
        self.central_widget = QStackedWidget()
        self.setCentralWidget(self.central_widget)

        self.viewer = VidViewer()
        self.vid = ShowVid()

        self.central_widget.addWidget(self.viewer)       
        self.central_widget.setCurrentWidget(self.viewer) 

        self.vid.signal.connect(self.viewer.setImage)  

        self.setGeometry(10,10,1280,720)        
        self.setFixedSize(1280,720) 

app = QApplication(sys.argv)
run = Main()   
run.show()

sys.exit(app.exec_())

Tags: runimageselfinitdefwidgetviewerclass