在Python 3和PyQt中使用QProcess.finished()

3 投票
1 回答
3854 浏览
提问于 2025-04-18 09:20

我该如何使用QProcess.finished()来调用另一个Python3脚本呢?

这是我调用的脚本:

#!/usr/bin/python

 from PyQt4.QtGui import QApplication
 from childcontrolgui import childcontrolgui

 def main():
   import sys
   app = QApplication(sys.argv)
   wnd = childcontrolgui()
   wnd.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
main()

我用的代码可以在这里找到。

def properties(self):
    command="python3 ../GUI/main.py"
    self.process=QProcess()
    self.process.finished.connect(self.onFinished)
    self.process.startDetached(command)

def onFinished(self,  exitCode,  exitStatus):
    self.Check_Timer.stop()
    self.Logout_Timer.stop()
    self.Firstrun=True
    self.initControl()

启动这个进程是没问题的,main.py的窗口会显示出来,但似乎finished这个事件没有被触发。当我关闭main.py的窗口时,什么也没有发生。

1 个回答

4

当你使用 startDetached() 的时候,你无法接收到信号,因为你没有对象可以接收这些信号。建议使用普通的 start() 方法。

另外,别忘了在控制脚本中也要启动 QApplication。

class Control(QObject):
    def properties(self):
        self.process=QProcess()
        self.process.finished.connect(self.onFinished)
        self.process.start('python3', ['../GUI/main.py'])

    def onFinished(self,  exitCode,  exitStatus):
        [...]

if __name__ == '__main__':
    app = QApplication(sys.argv)

    co = Control()
    co.properties()

    sys.exit(app.exec_())

撰写回答