Сигнал завершения программы 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_())
