关闭PyQT5 Gui窗口未结束子进程

问题描述 投票:0回答:1

此刻,当我调用一个函数时,它将在另一个这样的脚本中打开一个PYQT5 Gui:

A.py

def startGui():
    subprocess(["python", path/B.py], shell=True)

和B.py看起来像这样:

B.py

class MainWindow(QtWidgets.QMainWindow):
    ....
def main():
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
if __name__ == '__main__':
    main()

我的问题是,当我打开带有功能的Gui并关闭GUI窗口时,子进程会在后台继续进行。因为我不能再使用concurrenct.futures.ProcessPoolExecutor()。

python pyqt pyqt5
1个回答
0
投票

您可以使用psutil按名称杀死进程。

def kill():
    import psutil

    for proc in psutil.process_iter():  # iterate over processes.      
        if proc.name == 'B.py': # Find the process to kill A or B?
            print(proc.name())
            print('killing process')
            proc.kill()

在sys.exit调用之后添加函数

def main():
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
    kill() # <------------- Here
if __name__ == '__main__':
    main()
© www.soinside.com 2019 - 2024. All rights reserved.