Ошибка, которая указывает на это в следующей части:
def close(self):
self.close()
После вызова self.close () вы вызываете метод close () класса, который вызывает возвращенный self.close () икак вы видите, он генерирует бесконечный цикл.
Другая ошибка состоит в том, что PyQt не рекомендует изменять код, сгенерированный pyuic, рекомендуется создать другой класс, который наследуется из соответствующего окна, и использовать класс, сгенерированныйpyuic как интерфейс.
Учитывая то, что указано в предыдущей части, решение:
import sys
from PyQt5 import QtWidgets, QtGui, QtCore
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.pushButton.setText("Open new window")
class Ui_SecondWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.pushButton.setText("Close new window")
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.pushButton.clicked.connect(self.open)
@QtCore.pyqtSlot()
def open(self):
self.window = SecondWindow()
self.window.show()
class SecondWindow(QtWidgets.QMainWindow, Ui_SecondWindow):
def __init__(self, parent=None):
super(SecondWindow, self).__init__(parent)
self.setupUi(self)
self.pushButton.clicked.connect(self.close)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())