Закрытие нескольких окон PyQt5 только через кнопку
Когда открыто второе окно, по нажатию на кнопку можно закрыть все окна.
Задача в том, чтобы при нажатии на крестик во втором окне не закрывались два окна, а только открытое.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtCore import QUrl, Qt
class Ui_rules(object):
def setupUi(self, rules):
rules.setObjectName("rules")
rules.setFixedSize(1293, 772)
rules.setStyleSheet("background-color: white;\n""")
self.label_2 = QtWidgets.QLabel(rules)
self.label_2.setGeometry(QtCore.QRect(0, 0, 1301, 111))
self.label_2.setStyleSheet("background-color: red;\n"
"color: #FFF;\n"
"font: 24pt \"MS Shell Dlg 2\";")
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.pushButton = QtWidgets.QPushButton(rules)
self.pushButton.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.pushButton.setGeometry(QtCore.QRect(490, 650, 321, 81))
self.pushButton.setStyleSheet("QPushButton{\n"
"border: none;\n"
"font: 22pt \"MS Shell Dlg 2\";\n"
"color: rgb(255, 255, 0);\n"
"background-color: rgb(255, 0, 0);\n"
"border-radius: 10px"
"}\n"
"QPushButton:hover{\n"
"border: none;\n"
"font: 22pt \"MS Shell Dlg 2\";\n"
"color: rgb(255, 255, 0);\n"
"background-color: rgb(200, 52, 0);\n"
"border-radius: 10px"
"}\n")
self.pushButton.setObjectName("pushButton")
self.label = QtWidgets.QLabel(rules)
self.label.setGeometry(QtCore.QRect(0, 170, 1101, 50))
font = QtGui.QFont()
font.setPointSize(20)
self.label.setFont(font)
self.label.setObjectName("label")
self.label_3 = QtWidgets.QLabel(rules)
self.label_3.setGeometry(QtCore.QRect(0, 240, 1101, 50))
font = QtGui.QFont()
font.setPointSize(20)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.label_4 = QtWidgets.QLabel(rules)
self.label_4.setGeometry(QtCore.QRect(0, 310, 1101, 50))
font = QtGui.QFont()
font.setPointSize(20)
self.label_4.setFont(font)
self.label_4.setObjectName("label_4")
self.label_5 = QtWidgets.QLabel(rules)
self.label_5.setGeometry(QtCore.QRect(0, 380, 1111, 100))
font = QtGui.QFont()
font.setPointSize(20)
self.label_5.setFont(font)
self.label_5.setObjectName("label_5")
self.retranslateUi(rules)
QtCore.QMetaObject.connectSlotsByName(rules)
def retranslateUi(self, rules):
_translate = QtCore.QCoreApplication.translate
rules.setWindowTitle(_translate("rules", "Pravidlá"))
self.label_2.setText(_translate("rules", "Rules"))
self.pushButton.setText(_translate("rules", "Dobre"))
self.label.setText(_translate("rules", " ◉ dvaja hráči súťažia o to, kto rýchlejšie odpovie na otázku"))
self.label_3.setText(_translate("rules", " ◉ máte 7 sekúnd na odpoveď"))
self.label_4.setText(_translate("rules", " ◉ po výbere otázky si treba vybrať, kto bude chodiť"))
self.label_5.setText(_translate("rules", " ◉ Stlačte: Q - pre modrý tímový ťah\n"
" P - pre červený tímový ťah"))
# ???class infobtnopen(QMainWindow, Ui_rules):
class InfoBtnOpen(QtWidgets.QWidget, Ui_rules):
def __init__(self, parent=None):
super().__init__()
self.setWindowIcon(QtGui.QIcon('Ok.png'))
self.setupUi(self)
self.parent = parent
self.pushButton.clicked.connect(self.close)
def closeEvent(self, event):
self.parent.close()
class Ui_Startmenu(object):
def setupUi(self, Startmenu):
Startmenu.setObjectName("Startmenu")
Startmenu.setFixedSize(1341, 857)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(Startmenu.sizePolicy().hasHeightForWidth())
Startmenu.setSizePolicy(sizePolicy)
Startmenu.setStyleSheet("background-color: rgb(184, 234, 255);")
self.label = QtWidgets.QLabel(Startmenu)
self.label.setGeometry(QtCore.QRect(0, 50, 1341, 121))
self.label.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"font: 22pt \"MS Shell Dlg 2\";\n"
"color: #000\n"
"")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.infobtn = QtWidgets.QPushButton(Startmenu)
self.infobtn.setGeometry(QtCore.QRect(350, 500, 311, 91))
self.infobtn.setStyleSheet("QPushButton{\n"
"background-color: rgb(0, 170, 255);\n"
"font: 20pt \"MS Shell Dlg 2\";\n"
"color: white;\n"
"border: none;\n"
"border-radius: 20px"
"}\n"
"\n"
"QPushButton:hover{\n"
"background-color: rgb(0, 136, 255);\n"
"font: 24pt \"MS Shell Dlg 2\";\n"
"color: white;\n"
"border: none;\n"
"border-radius: 20px"
"}\n")
self.infobtn.setObjectName("infobtn")
self.retranslateUi(Startmenu)
QtCore.QMetaObject.connectSlotsByName(Startmenu)
def retranslateUi(self, Startmenu):
_translate = QtCore.QCoreApplication.translate
Startmenu.setWindowTitle(_translate("Startmenu", "Collabio"))
self.label.setText(_translate("Startmenu", "Добро пожаловать в викторину Collabio!"))
self.infobtn.setText(_translate("Startmenu", "Информация"))
class StartMenu(QtWidgets.QWidget, Ui_Startmenu):
def __init__(self, parent=None):
super(StartMenu, self).__init__(parent)
self.setupUi(self)
self.infobtn.clicked.connect(self.info_show)
self.infobtnopen = InfoBtnOpen(self)
def info_show(self):
self.infobtnopen.show()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
main = StartMenu()
main.show()
sys.exit(app.exec_())
Источник: Stack Overflow на русском