如何解决此错误“对象无属性”

时间:2020-02-12 05:50:15

标签: python pyqt5

错误:self.START.clicked.connect(self.StartClicked)

AttributeError:“代码”对象没有属性“ StartClicked”

这是我的代码。 我不知道这段代码在哪里错了,请您检查一下并纠正我哪里错了。

当我尝试在不使用GUI的情况下运行代码时,它可以正常工作,但是在使用QT时,它给了我这个错误。

import sys
import cv2
import datetime

from PyQt5.QtWidgets import QApplication ,QDialog
from PyQt5.uic import loadUi
from PyQt5.QtGui import QImage,QPixmap
from PyQt5.QtCore import pyqtSlot


class code(QDialog):
   def __init__(self):
        super(code,self).__init__()
        loadUi('letst.ui',self)
        self.logic =0

        self.START.clicked.connect(self.StartClicked)
        self.STOP.clicked.connect(self.StopClicked)
@pyqtSlot()
def StartClicked(self):

        self.logic=1
        fourcc = cv2.VideoWriter_fourcc(*'XVID')
        date=datetime.datetime.now()
        cap = cv2.VideoCapture(1)
        out= cv2.VideoWriter('E:/project/videos/rec_%s%s%s%s%s%s.mp4' %(date.year,date.month,date.day,date.hour,date.minute,date.second),fourcc,20.0,(640,480))


        while (cap.isOpened()):

                ret,frame = cap.read()
                if ret == True:
                        self.displayImage(frame,1)
                        cv2.waitKey()

                        if  (self.logic==1):
                                out.write(frame)
                        if (self.logic==0):
                                break
                else:
                    print('return not found')
                cap.release()
                out.release()
                cv2.destroyAllWindows()

def StopClicked(self):
    self.logic=0
def displayImage(self, img,window=1):
    qformat = QImage.Format_Indexed8

    if len(img.shape)==3:
        if (img.shape[2])==4:
            qformat=QImage.Format_RGBA888

        else:
            qformat=QImage.Format_RGB888
    img =QImage(img, img.shape[1],img.shape[0],qformat)
    img =img.rgbSwapped()
    self.imglabel.setPixmap(QPixmap.fromImage(img))
    self.imgLabel.setAlignment(QtCore.Qt.AlignHCenter | Qtcore.Qt.AlignVCenter)

app=QApplication(sys.argv)
Window = code()
Window.show()
try:
    sys.exit(app.exec_())
except:
    print("exiting")

这是ui文件:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Dialog</class>
 <widget class="QDialog" name="Dialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>780</width>
    <height>555</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Dialog</string>
  </property>
  <widget class="QLabel" name="imgLabel">
   <property name="geometry">
    <rect>
     <x>30</x>
     <y>30</y>
     <width>711</width>
     <height>421</height>
    </rect>
   </property>
   <property name="frameShape">
    <enum>QFrame::WinPanel</enum>
   </property>
   <property name="frameShadow">
    <enum>QFrame::Plain</enum>
   </property>
   <property name="text">
    <string/>
   </property>
  </widget>
  <widget class="QPushButton" name="START">
   <property name="geometry">
    <rect>
     <x>40</x>
     <y>490</y>
     <width>101</width>
     <height>51</height>
    </rect>
   </property>
   <property name="font">
    <font>
     <pointsize>16</pointsize>
    </font>
   </property>
   <property name="text">
    <string>start</string>
   </property>
  </widget>
  <widget class="QPushButton" name="STOP">
   <property name="geometry">
    <rect>
     <x>180</x>
     <y>490</y>
     <width>101</width>
     <height>51</height>
    </rect>
   </property>
   <property name="font">
    <font>
     <pointsize>16</pointsize>
    </font>
   </property>
   <property name="text">
    <string>stop</string>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

1 个答案:

答案 0 :(得分:1)

以下函数应在类内部:

def StartClicked(self):
def StopClicked(self):
def displayImage

请更正缩进并尝试。