Дочернее окно не закрывается при закрытии главного PyQt5

как мне сделать так, чтобы при закрытии главного окна, дочернее автоматически завершалось?

import sys
from PyQt5 import uic
from PyQt5.QtWidgets import *

class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        uic.loadUi('t1.ui', self)
        self.pushButton.clicked.connect(self.open_second_window)
                                        
    def open_second_window(self):
        self.window = SecondWindow()
        self.window.show()


class SecondWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('t2d.ui', self)



App = QApplication(sys.argv)
a = MainWindow()
a.show()
sys.exit(App.exec())        

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


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

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

При создании экземпляра второго окна, передайте ссылку на главное окно.

main.py

import sys
from PyQt5 import uic
from PyQt5.QtWidgets import *

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('t1.ui', self)
        self.pushButton.clicked.connect(self.open_second_window)
                                        
    def open_second_window(self):
        self.window = SecondWindow(self)                             # +++ self
        self.window.show()


class SecondWindow(QMainWindow):
    def __init__(self, parent=None):                                 # +++ parent
        super().__init__(parent)                                     # +++ parent
        uic.loadUi('t2d.ui', self)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

t1.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>272</width>
    <height>205</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>100</x>
      <y>50</y>
      <width>75</width>
      <height>61</height>
     </rect>
    </property>
    <property name="text">
     <string>PushButton</string>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>272</width>
     <height>21</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

t2d.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>412</width>
    <height>245</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>SecondWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>180</x>
      <y>70</y>
      <width>75</width>
      <height>81</height>
     </rect>
    </property>
    <property name="text">
     <string>PushButton2</string>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>412</width>
     <height>21</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

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

→ Ссылка