Почему не открывается вторая форма?

При нажатии на кнопку в первой форме должна открываться вторая, но приложение вылетает.

import sys
from PyQt5 import uic
from PyQt5.QtWidgets import QWidget, QMainWindow
from PyQt5.QtWidgets import QApplication


class FirstForm(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('firstform.ui', self)
        self.btn.clicked.connect(self.open)

    def open(self):
        self.second_form = SecondForm(self)
        self.second_form.show()


class SecondForm(QWidget):
    def __init__(self):
        super().__init__()
        uic.loadUi('secondform.ui', self)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = FirstForm()
    ex.show()
    sys.exit(app.exec())

Ответы (1 шт):

Автор решения: S. Nick

Или так:

...
    def open(self):
        self.second_form = SecondForm(self)       
        self.second_form.show()


class SecondForm(QWidget):
# -----------------> vvvvvvvvvvvvv <---------------------------------------
    def __init__(self, parent=None):
        super().__init__()
        uic.loadUi('secondform.ui', self)
...

или так:

main.py

import sys
from PyQt5 import uic
from PyQt5.QtWidgets import QWidget, QMainWindow, QApplication


class FirstForm(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('firstform.ui', self)
        self.btn.clicked.connect(self.open)

    def open(self):
        self.second_form = SecondForm()                     # убрать  self
        self.second_form.show()


class SecondForm(QWidget):
    def __init__(self):
        super().__init__()
        uic.loadUi('secondform.ui', self)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = FirstForm()
    ex.show()
    sys.exit(app.exec())

firstform.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>229</width>
    <height>287</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>FirstForm</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QGridLayout" name="gridLayout">
    <item row="0" column="0">
     <widget class="QPushButton" name="btn">
      <property name="text">
       <string>btn</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

secondform.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>430</width>
    <height>184</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>SecondForm</string>
  </property>
  <layout class="QGridLayout" name="gridLayout">
   <item row="0" column="0">
    <widget class="QLabel" name="label">
     <property name="font">
      <font>
       <pointsize>28</pointsize>
      </font>
     </property>
     <property name="text">
      <string>SecondForm</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignCenter</set>
     </property>
    </widget>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections/>
</ui>

введите сюда описание изображения

→ Ссылка