Drodzy pasjonaci mam do Was kolejną prośbę o pomoc. Czy ktoś zna sposób na przypisanie funkcji lub jakiegoś eventu to standardowych buttonów w QMessageBox?
Stworzyłem taki Box, który wyskakuje po naciśnięciu przycisku Quit w głównym oknie programu.. Niestety zarówno standardowy button Yes i No zamyka mi program. Ja chciałbym oczywiście aby button NO nie zamykał programu tylko jedynie QMessageBox (ten popup co wyskakuje). Próbowałem wiele sposobów ale nic nie idzie. Kod i screen poniżej:
Pytanie ma związek z liniami kodu:
17 - podpięcie buttona 'Quit' pod metode otwierająca QMessageBoxa
111-112 - metoda zamykania programu
154- 162 - zefiniowenia całego okna popup czyli QMessageBoxa
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox
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.end_window)
#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.add_B.clicked.connect(self.addmition)
self.sub_B = QtWidgets.QPushButton(self.centralwidget)
self.sub_B.setGeometry(QtCore.QRect(110, 60, 91, 41))
self.sub_B.setObjectName("sub_B")
self.sub_B.clicked.connect(self.subtraction)
self.multip_B = QtWidgets.QPushButton(self.centralwidget)
self.multip_B.setGeometry(QtCore.QRect(210, 60, 91, 41))
self.multip_B.setObjectName("multip_B")
self.multip_B.clicked.connect(self.multiplication)
self.div_B = QtWidgets.QPushButton(self.centralwidget)
self.div_B.setGeometry(QtCore.QRect(310, 60, 91, 41))
self.div_B.setObjectName("div_B")
self.div_B.clicked.connect(self.division)
self.mod_B = QtWidgets.QPushButton(self.centralwidget)
self.mod_B.setGeometry(QtCore.QRect(410, 60, 91, 41))
self.mod_B.setObjectName("mod_B")
self.mod_B.clicked.connect(self.modulo)
self.num1_field = QtWidgets.QLineEdit(self.centralwidget)
self.num1_field.setGeometry(QtCore.QRect(10, 30, 151, 21))
self.num1_field.setObjectName("num1_field")
self.num1_field.setToolTip('use <b>.</b> to separate float nummbers')
self.num2_field = QtWidgets.QLineEdit(self.centralwidget)
self.num2_field.setGeometry(QtCore.QRect(180, 30, 151, 21))
self.num2_field.setObjectName("num2_field")
self.num2_field.setToolTip('use <b>.</b> to separate float nummbers')
self.result_field = QtWidgets.QLineEdit(self.centralwidget)
self.result_field.setToolTip('Input <b>nummbers</b> and click an action')
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):
sys.exit(1)
def addmition(self):
n1 = float(self.num1_field.text())
n2 = float(self.num2_field.text())
score = ""
if self.add_B.click:
score = n1 + n2
self.result_field.setText(str(score))
def subtraction(self):
n1 = float(self.num1_field.text())
n2 = float(self.num2_field.text())
score = ""
if self.sub_B.click:
score = n1 - n2
self.result_field.setText(str(score))
def multiplication(self):
n1 = float(self.num1_field.text())
n2 = float(self.num2_field.text())
score = ""
if self.multip_B.click:
score = n1 * n2
self.result_field.setText(str(score))
def division(self):
n1 = float(self.num1_field.text())
n2 = float(self.num2_field.text())
score = ""
if self.div_B.click:
score = n1 / n2
self.result_field.setText(str(score))
def modulo(self):
n1 = float(self.num1_field.text())
n2 = float(self.num2_field.text())
score = ""
if self.mod_B.click:
score = n1 % n2
self.result_field.setText(str(score))
def end_window(self):
msg = QMessageBox()
msg.setWindowTitle('Question')
msg.setText('Do you want to close the program?')
msg.setIcon(QMessageBox.Question)
msg.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
msg.buttonClicked.connect(self.close_it)
x = msg.exec_()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())