Cześć drodzy pasjonaci.
Stworzyłem sobie widok takiego prostego kalkulatora za pomocą PyQt5 w edytorze QTDesigner. Kod został wygenerowany, ja natomiast jeszcze z widoku edytora ponazywałem sobie obiekty, tak by łatwo móc je identyfikować przy podpinaniu logiki. Niestety z tym podpinaniem nie idzie.
Stworzyłem prosta metodę close_it(self) na zamykanie programu i chce ją podpiąć do buttonu Quit za pomocą wyrażeń: quit_B.clicked.connect(self.close_it)
jest to 16 i 94 linia poniższego kodu.
Aplikacja uruchamia się ale po naciśnięciu klawisza Quit wyskakuje error: AttributeError: 'Ui_MainWindow' object has no attribute 'close'
PS. Dodam że błędu nie generuje nieprawidłowa ilosć spacji, bo juz to sprawdzałem w różnych edytorach i wpisywałem tą funkcję w różnych miejscach kodu.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import *
import sys
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(510, 170)
MainWindow.setMinimumSize(QtCore.QSize(510, 170))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.quit_B = QtWidgets.QPushButton(self.centralwidget)
self.quit_B.setGeometry(QtCore.QRect(10, 110, 491, 31))
self.quit_B.setObjectName("quit_B")
self.quit_B.clicked.connect(self.close_it)
self.add_B = QtWidgets.QPushButton(self.centralwidget)
self.add_B.setGeometry(QtCore.QRect(10, 60, 91, 41))
self.add_B.setObjectName("add_B")
self.sub_B = QtWidgets.QPushButton(self.centralwidget)
self.sub_B.setGeometry(QtCore.QRect(110, 60, 91, 41))
self.sub_B.setObjectName("sub_B")
self.multip_B = QtWidgets.QPushButton(self.centralwidget)
self.multip_B.setGeometry(QtCore.QRect(210, 60, 91, 41))
self.multip_B.setObjectName("multip_B")
self.div_B = QtWidgets.QPushButton(self.centralwidget)
self.div_B.setGeometry(QtCore.QRect(310, 60, 91, 41))
self.div_B.setObjectName("div_B")
self.mod_B = QtWidgets.QPushButton(self.centralwidget)
self.mod_B.setGeometry(QtCore.QRect(410, 60, 91, 41))
self.mod_B.setObjectName("mod_B")
self.num1_field = QtWidgets.QLineEdit(self.centralwidget)
self.num1_field.setGeometry(QtCore.QRect(10, 30, 151, 21))
self.num1_field.setObjectName("num1_field")
self.num2_field = QtWidgets.QLineEdit(self.centralwidget)
self.num2_field.setGeometry(QtCore.QRect(180, 30, 151, 21))
self.num2_field.setObjectName("num2_field")
self.result_field = QtWidgets.QLineEdit(self.centralwidget)
self.result_field.setToolTip('Wpisz <b>liczby</b> i wybierz działanie...')
self.result_field.readonly = True
self.result_field.setGeometry(QtCore.QRect(350, 30, 151, 21))
self.result_field.setObjectName("result_field")
self.num1_txt = QtWidgets.QLabel(self.centralwidget)
self.num1_txt.setGeometry(QtCore.QRect(10, 10, 121, 21))
self.num1_txt.setObjectName("num1_txt")
self.num2_txt = QtWidgets.QLabel(self.centralwidget)
self.num2_txt.setGeometry(QtCore.QRect(180, 10, 121, 21))
self.num2_txt.setObjectName("num2_txt")
self.result_txt = QtWidgets.QLabel(self.centralwidget)
self.result_txt.setGeometry(QtCore.QRect(350, 10, 121, 21))
self.result_txt.setObjectName("result_txt")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
MainWindow.setTabOrder(self.num1_field, self.num2_field)
MainWindow.setTabOrder(self.num2_field, self.result_field)
MainWindow.setTabOrder(self.result_field, self.add_B)
MainWindow.setTabOrder(self.add_B, self.sub_B)
MainWindow.setTabOrder(self.sub_B, self.multip_B)
MainWindow.setTabOrder(self.multip_B, self.div_B)
MainWindow.setTabOrder(self.div_B, self.mod_B)
MainWindow.setTabOrder(self.mod_B, self.quit_B)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Simple Calculator"))
self.quit_B.setText(_translate("MainWindow", "Quit"))
self.add_B.setText(_translate("MainWindow", "Add"))
self.sub_B.setText(_translate("MainWindow", "Subtract"))
self.multip_B.setText(_translate("MainWindow", "Multiply"))
self.div_B.setText(_translate("MainWindow", "Divide"))
self.mod_B.setText(_translate("MainWindow", "Modulo"))
self.num1_txt.setText(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt; color:#cf0000;\">Number 1:</span></p></body></html>"))
self.num2_txt.setText(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt; color:#0000ad;\">Number 2:</span></p></body></html>"))
self.result_txt.setText(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt; color:#007e00;\">Result :</span></p></body></html>"))
def close_it(self):
self.close()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())