【问题标题】:QProcess finished signal parameters lambda functionQProcess完成信号参数lambda函数
【发布时间】:2021-03-04 13:10:11
【问题描述】:

我不熟悉在 qprocess 信号槽环境中处理 lambda 函数。我的函数参数有问题。特别是对于finished() 信号。根据文档,它接受两个参数:def finished (exitCode, exitStatus)

我正在尝试这样的事情:

for i, thing in enumerate(something):
    self.proc_codificar.append(Qprocess())
    #(code here)
    self.proc_codificar[i].finished.connect(lambda exitCode, exitStatus, proc=self.proc_codificar[i]: self.codificar_fin(exitCode, exitStatus, proc))
    #(code here)

在进程完成后,我想知道 exitCode、exitStatus 和进程本身

def self.proc_codificar(self, exitCode, exitStatus, proc)
    print(exitCode)
    print(exitStatus)
    print(proc)

但是这种方式行不通。处理lambda函数的正确方法是什么?

【问题讨论】:

    标签: python signals-slots pyside2 qprocess


    【解决方案1】:

    PySide2 中 QProcess 的完成信号超载,因此有 2 个签名(请参阅docs):

    • PySide2.QtCore.QProcess.finished(exitCode, exitStatus)

    • PySide2.QtCore.QProcess.finished(exitCode)

    注意:第二种方法被标记为已弃用,因此在下一个版本中可能会被淘汰。

    鉴于上述情况,您必须在连接中注明签名:

    for i, thing in enumerate(something):
        process = QProcess()
        # (code here)
        process.finished[int, QProcess.ExitStatus].connect(
            lambda exitCode, exitStatus, proc=process: self.codificar_fin(
                exitCode, exitStatus, proc
            )
        )
        # (code here)
        self.proc_codificar.append(process)
    

    注意:在 PyQt5 和 Qt/C++ 中不会发生这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 2020-01-04
      相关资源
      最近更新 更多