首页 > 解决方案 > QProcess没有调用完成?

问题描述

我尝试从子进程 Popen 阻止 PyQt GUI中实现建议,但似乎永远不会调用 onFinished 函数。

class MyApp(QtWidgets.QMainWindow, Ui_MainWindow):

[...]

    def Run_PnL_Script(self):
        self.Run_PnL.setEnabled(False)
        self.Run_PnL.setStyleSheet("background-color: #D3D3D3; color: #FFFFFF")
        self.PnL_Status.setText("Running...")
        process = QtCore.QProcess(self)
        process.finished.connect(self.onFinished)
        process.startDetached("cmd.exe", ["/c", "K:\Market Risk\Risk App\Batches\RTest.bat"])

    def onFinished(self, exitCode, exitStatus):
        self.PnL_Status.setText("Complete.")
        self.Run_PnL.setEnabled(True)
        self.Run_PnL.setStyleSheet("background-color: #4582EC; color: #FFFFFF")

[...]

在此先感谢您的帮助。

标签: pythonpyqtpyqt5qprocess

解决方案


您有 2 个错误:

  • 当你在 cmd.exe 中执行完一个命令并不意味着你关闭了 cmd.exe,所以你必须在 .bat 的末尾使用 EXIT 命令来关闭它。

RTest.bat

:: Another commands
EXIT
  • 不要使用startDetached(),因为这是一个静态方法,它创建一个不同于“进程”变量的内部 QProcess,您必须使用该start()方法。
# ...
process = QtCore.QProcess(self)
process.finished.connect(self.onFinished)
process.start("cmd.exe", ["/c", "K:\Market Risk\Risk App\Batches\RTest.bat"])

推荐阅读