在Python 3和PyQt中使用QProcess.finished()
我该如何使用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_())