Чтобы создать дочернее окно (или вторую форму, которая будет подчинена первой) в PyQt5, можно воспользоваться классами QDialog, QMainWindow или QWidget для создания главной и дочерних форм. Чтобы открыть дочернее окно из главного окна, можно определить слот в главном окне, который будет создавать и отображать дочернее окно. Передача переменной из первой формы во вторую может быть выполнена через инициализацию второй формы с передачей ей необходимых параметров.
Вот примерный сценарий того, как это может быть реализовано:
1. Дизайн обеих форм в Qt Designer и преобразование .ui файлов в .py скрипты с помощью `pyuic5`.
2. Создание класса для главного окна.
3. Создание класса для дочернего окна.
4. Связывание сигнала нажатия кнопки в главном окне с методом, который создает и отображает дочернее окно, и передача переменной при создании его экземпляра.
Давайте рассмотрим пример кода, который иллюстрирует это:
```python
from PyQt5 import QtWidgets, uic
from PyQt5.QtWidgets import QDialog
# Загрузка классов из сгенерированных python модулей с дизайном
from main_window import Ui_MainWindow # класс из main_window.py
from child_window import Ui_ChildWindow # класс из child_window.py
class ChildForm(QDialog):
def __init__(self, some_data):
super().__init__()
self.ui = Ui_ChildWindow()
self.ui.setupUi(self)
# Используем переданную переменную
self.ui.someLabel.setText(some_data)
class MainForm(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# Обработка нажатия кнопки для открытия дочернего окна
self.ui.pushButton.clicked.connect(self.open_child_window)
def open_child_window(self):
# Инициализация дочернего окна с передачей переменной
data_to_pass = "Hello, Child Window!"
self.child_window = ChildForm(data_to_pass)
self.child_window.show()
# Запуск приложения
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
main_window = MainForm()
main_window.show()
sys.exit(app.exec_())
```
В этом примере предполагается, что у вас есть два файла с оконным дизайном, скомпилированных в Python классы: `main_window.py` и `child_window.py`.
Основные моменты для внимания:
- `ChildForm` создается как подкласс `QDialog` и инициализируется с переменной `some_data`, которую потом можно использовать в методах этого класса, например, установка в лейбл.
- `MainForm` создает кнопку (или какой-то другой виджет, который будет открывать дочернее окно), к сигналу нажатия которой привязывается метод `open_child_window`, создающий и отображающий экземпляр `ChildForm`.
- Код запускает цикл обработки событий приложения, создавая экземпляр `MainForm` и отображая его.
Пожалуйста, помните, что для примеров требуется наличие соответствующих дизайнов и их предварительная компиляция из `.ui` файлов в `.py` файлы с помощью `pyuic5`.