Как вывести подтверждения закрытия окна PyQt
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from openpyxl import load_workbook
class Ui_Gamepol(object):
def setupUi(self, Gamepol):
Gamepol.setObjectName("Gamepol")
Gamepol.setFixedSize(1334, 1000)
class MainWindow(QtWidgets.QMainWindow, Ui_Gamepol):
def __init__(self):
super().__init__()
self.setupUi(self)
def closeEvent(self, event):
# self.window = CloseWindowClass()
# self.window.show()
# kod
class Ui_closewindow(object):
def setupUi(self, closewindow):
closewindow.setObjectName("closewindow")
closewindow.setFixedSize(716, 269)
closewindow.setStyleSheet("background-color: rgb(184, 234, 255);")
self.question_close = QtWidgets.QLabel(closewindow)
self.question_close.setGeometry(QtCore.QRect(0, 0, 721, 71))
self.question_close.setStyleSheet("color: rgb(255, 255, 255);\n"
"font: 24pt \"MS Shell Dlg 2\";\n"
"background-color: #00bbf9;")
self.question_close.setAlignment(QtCore.Qt.AlignCenter)
self.question_close.setObjectName("question_close")
self.closethegamebtn = QtWidgets.QPushButton(closewindow)
self.closethegamebtn.setGeometry(QtCore.QRect(160, 130, 171, 61))
self.closethegamebtn.setStyleSheet("QPushButton{\n"
"border:none;\n"
"background-color: rgb(255, 174, 75);\n"
"font: 28px \"MS Shell Dlg 2\";\n"
"color: white;\n"
"border-radius: 10px\n"
"}\n"
"QPushButton:hover{\n"
"border:none;\n"
"background-color: rgb(255, 0, 127);\n"
"font: 28px \"MS Shell Dlg 2\";\n"
"color: white;\n"
"border-radius: 10px\n"
"}")
self.closethegamebtn.setObjectName("closethegamebtn")
self.donotclosethegamebtn = QtWidgets.QPushButton(closewindow)
self.donotclosethegamebtn.setGeometry(QtCore.QRect(390, 130, 171, 61))
self.donotclosethegamebtn.setStyleSheet("QPushButton{\n"
"border:none;\n"
"background-color: rgb(255, 174, 75);\n"
"font: 28px \"MS Shell Dlg 2\";\n"
"color: white;\n"
"border-radius: 10px\n"
"}\n"
"QPushButton:hover{\n"
"border:none;\n"
"background-color: rgb(255, 0, 127);\n"
"font: 28px \"MS Shell Dlg 2\";\n"
"color: white;\n"
"border-radius: 10px\n"
"}")
self.donotclosethegamebtn.setObjectName("donotclosethegamebtn")
self.retranslateUi(closewindow)
QtCore.QMetaObject.connectSlotsByName(closewindow)
def retranslateUi(self, closewindow):
_translate = QtCore.QCoreApplication.translate
closewindow.setWindowTitle(_translate("closewindow", "Close"))
self.question_close.setText(_translate("closewindow", "Naozaj chcete hru uzavrieť ?"))
self.closethegamebtn.setText(_translate("closewindow", "Ano"))
self.donotclosethegamebtn.setText(_translate("closewindow", "Nie"))
class CloseWindowClass(QtWidgets.QWidget, Ui_closewindow):
def __init__(self, parent=None):
super().__init__()
self.setupUi(self)
self.setWindowIcon(QtGui.QIcon('icons/close.svg'))
self.parent = parent
self.donotclosethegamebtn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.closethegamebtn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.donotclosethegamebtn.clicked.connect(self.hide)
self.closethegamebtn.clicked.connect(self.cl)
def cl(self):
# kod
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
Суть в том, что при нажатии на кнопку должно открываться CloseWindowClass()
, и потом, если будет нажата кнопка Ano
, закроются все окна, если кнопка Nie
, тогда ничего не произойдет.
При этом главное окно не должно закрываться.
Источник: Stack Overflow на русском