2017-10-17 13 views
0

저는 두 개의 숫자를 받아들이고 추가하는 스크립트를 만들기 위해 기본적인 PyQt 디자이너 예제를 사용하고 있습니다. PyQt의 기본 예제를 구현하는 중 오류가 발생했습니다.

내가으로 calc_ui.py 파일을 만든 :

from PyQt4 import QtCore, QtGui 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class Ui_CalculatorUI(object): 
    def setupUi(self, CalculatorUI): 
     CalculatorUI.setObjectName(_fromUtf8("CalculatorUI")) 
     CalculatorUI.resize(219, 134) 
     self.gridLayout = QtGui.QGridLayout(CalculatorUI) 
     self.gridLayout.setObjectName(_fromUtf8("gridLayout")) 
     self.labelX = QtGui.QLabel(CalculatorUI) 
     self.labelX.setObjectName(_fromUtf8("labelX")) 
     self.gridLayout.addWidget(self.labelX, 0, 0, 1, 1) 
     self.lineEditX = QtGui.QLineEdit(CalculatorUI) 
     self.lineEditX.setObjectName(_fromUtf8("lineEditX")) 
     self.gridLayout.addWidget(self.lineEditX, 0, 1, 1, 1) 
     self.labelY = QtGui.QLabel(CalculatorUI) 
     self.labelY.setObjectName(_fromUtf8("labelY")) 
     self.gridLayout.addWidget(self.labelY, 1, 0, 1, 1) 
     self.lineEditY = QtGui.QLineEdit(CalculatorUI) 
     self.lineEditY.setObjectName(_fromUtf8("lineEditY")) 
     self.gridLayout.addWidget(self.lineEditY, 1, 1, 1, 1) 
     self.labelZ = QtGui.QLabel(CalculatorUI) 
     self.labelZ.setObjectName(_fromUtf8("labelZ")) 
     self.gridLayout.addWidget(self.labelZ, 2, 0, 1, 1) 
     self.lineEditZ = QtGui.QLineEdit(CalculatorUI) 
     self.lineEditZ.setReadOnly(True) 
     self.lineEditZ.setObjectName(_fromUtf8("lineEditZ")) 
     self.gridLayout.addWidget(self.lineEditZ, 2, 1, 1, 1) 
     self.buttonCalc = QtGui.QPushButton(CalculatorUI) 
     self.buttonCalc.setObjectName(_fromUtf8("buttonCalc")) 
     self.gridLayout.addWidget(self.buttonCalc, 3, 0, 1, 2) 

     self.retranslateUi(CalculatorUI) 
     QtCore.QMetaObject.connectSlotsByName(CalculatorUI) 

    def retranslateUi(self, CalculatorUI): 
     CalculatorUI.setWindowTitle(_translate("CalculatorUI", "Calculator", None)) 
     self.labelX.setText(_translate("CalculatorUI", "X:", None)) 
     self.labelY.setText(_translate("CalculatorUI", "Y:", None)) 
     self.labelZ.setText(_translate("CalculatorUI", "Z:", None)) 
     self.buttonCalc.setText(_translate("CalculatorUI", "Calculate", None)) 

main.py은 다음과 같습니다

from PyQt4 import QtGui, QtCore 
import sys 
from calc_ui import Ui_CalculatorUI 

class Calculator(Ui_CalculatorUI): 
    def __init__(self): 
     Ui_CalculatorUI.__init__(self) 
     #self.setupUi(self) 
     self.buttonCalc.clicked.connect(self.handleCalculate) 

    def handleCalculate(self): 
     x = int(self.lineEditX.text()) 
     y = int(self.lineEditY.text()) 
     self.lineEditZ.setText(str(x + y)) 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    window = Calculator() 
    window.show() 
    sys.exit(app.exec_()) 

하지만, 내 오류는 다음과 같습니다

AttributeError: 'Calculator' object has no attribute 'buttonCalc' 

내가 'buttonCalc'는 것을 볼 수 있지만 calc_ui.py 파일에 정의되어 있습니다.

다른 구문을 시도했지만 여기 벽에 부딪 히고 있습니다.

답변

1

위젯이 아닌 위젯을 채우기위한 클래스를 생성하려면 템플릿으로 가져온 위젯에서 상속받은 클래스를 만들어 대화 상자라고 가정하고 setupUi() 함수를 호출해야합니다

enter image description here

: 즉, 위젯을

class Calculator(QtGui.QDialog, Ui_CalculatorUI): 
    def __init__(self, parent=None): 
     QtGui.QDialog.__init__(self, parent) 
     self.setupUi(self) 
     self.buttonCalc.clicked.connect(self.handleCalculate) 

    def handleCalculate(self): 
     x = int(self.lineEditX.text()) 
     y = int(self.lineEditY.text()) 
     self.lineEditZ.setText(str(x + y)) 

출력 채우고