Почему не открывается вторая форма?
При нажатии на кнопку в первой форме должна открываться вторая, но приложение вылетает.
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>
