Сигнал завершения программы pyqt5. Выполнения кода после закрытия окна

Мне нужно связать программу с интерфейсом PyQt5 и скриптом через subprocess. Связать получилось, но как оказалось, дочерняя программа не убивается автоматически после завершения основной программы.

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

Припустим, есть следующий код:

import sys
import os
import subprocess
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

class main(QWidget):


    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(500, 150, 1000, 763)
        self.show()

process = subprocess.Popen(['python3', 'name.py'])
app = QApplication(sys.argv)
main = main()
sys.exit(app.exec_())

Куда вставлять код, когда завершится эта программа? Моим опытом проверено, что код после последних строк не выполняется интерпретатором.


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

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

я рекомендую вам изучить класс QProcess.

Класс QProcess используется для запуска внешних программ и связи с ними.

https://doc.qt.io/qt-5/qprocess.html

import sys
from PyQt5 import QtCore, QtWidgets


class Terminal(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()

        self.textEdit = QtWidgets.QPlainTextEdit(readOnly=True)
        self.lineEdit = QtWidgets.QLineEdit()

        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.textEdit)
        layout.addWidget(self.lineEdit)

        self.process = QtCore.QProcess(self)                             # !!!
        self.process.setProgram(sys.executable)                          # !!!

    def runFile(self, url):
        self.process.setArguments([url])
        self.process.start()                                             # !!!

    def closeEvent(self, event):
        self.process.close()                                             # !!!                                           
        event.accept()    


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = Terminal()
    window.runFile("test_floa2.py")                   # !!! тут ваша 'name.py'
    window.show()
    sys.exit(app.exec_())

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

→ Ссылка