在 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.5,单独窗口中的 pyqt5 进度条 gui
在 Windows XP 32 位上运行的最新版本的 Python 3 和 PyQt5