Как закрыть окно, через которое было открыто другое PyQt5
У меня есть два файла. Первый, из которого вызываю второе окно вот так: И второй файл:
from PyQt5 import QtCore, QtGui, QtWidgets, QtGui
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtCore import QUrl, Qt
from PyQt5.QtWidgets import QDesktopWidget
from PyQt5.QtMultimedia import QMediaPlaylist, QMediaPlayer, QMediaContent
from gamepoletru import MainWindow
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.clicked.connect(self.close)
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 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", "Vitajte v kvízovej hre Collabio!"))
self.infobtn.setText(_translate("Startmenu", "Informácie"))
class infobtnopen(QMainWindow, Ui_rules):
def __init__(self, parent=None):
super().__init__()
self.setWindowIcon(QtGui.QIcon('icons/question.svg'))
self.setupUi(self)
class startmenu(QMainWindow,Ui_Startmenu):
def __init__(self, parent=None):
super(startmenu, self).__init__(parent)
self.setupUi(self)
self.infobtn.clicked.connect(self.infoshow)
self.infobtnopen = infobtnopen(self)
def infoshow(self):
self.infobtnopen.show()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
main = startmenu()
main.show()
sys.exit(app.exec_())
При нажатии на кнопку "инфо" открывается окно с клавишей "dobre".
Нужно сделать, чтобы при нажатии на нее закрывались два окна.
Так же можно эти два класса расписать в 2 файла
Источник: Stack Overflow на русском