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

Posted

技术标签:

【中文标题】在 Python 3 和 PyQt 中使用 QProcess.finished()【英文标题】:Using QProcess.finished() in Python 3 and PyQt 【发布时间】:2014-06-10 18:35:33 【问题描述】:

如何使用 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()

为了调用脚本,我使用here所见的代码

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 的窗口,但似乎没有触发完成。当我从 main.py 关闭窗口时,什么也没有发生

【问题讨论】:

【参考方案1】:

You can't get a signal when you use startDetached() because you have no object。改用普通的 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_())

【讨论】:

以上是关于在 Python 3 和 PyQt 中使用 QProcess.finished()的主要内容,如果未能解决你的问题,请参考以下文章

在 python 3.6+ 和 PyQt5 中腌制一个 QPolygon

如何在 Python 3 和 PyQt5 中实现多核处理?

Python 3.5,单独窗口中的 pyqt5 进度条 gui

在 Windows XP 32 位上运行的最新版本的 Python 3 和 PyQt5

如何使用 PyQt5 和 python 3.6 将 .ui 文件转换为 .py 文件

使用 python 3.7 PyQt5 和 cx_Freeze 创建可执行文件,但 DLL 无法加载