Python 从不在主脚本中的方法更新Qt接口中的文本

Python 从不在主脚本中的方法更新Qt接口中的文本,python,while-loop,pyqt,qtextedit,Python,While Loop,Pyqt,Qtextedit,我想在我的主程序中调用一个方法ExecuteM,其中在中,当在Qt中循环我的界面中的文本时(调用结果),使用Qt creator完成的操作将在每次迭代中更新 class Machine(): def __init__(self, result): self.result=result def ExecuteM(self, Var1, Var2): while Var1 != 'stop': Var2 = Var2 + 3

我想在我的主程序中调用一个方法
ExecuteM
,其中在
中,当
在Qt中循环我的界面中的文本时(调用
结果
),使用Qt creator完成的操作将在每次迭代中更新

class Machine():
    def __init__(self, result):
        self.result=result

    def ExecuteM(self, Var1, Var2):
        while Var1 != 'stop':
            Var2 = Var2 + 3
            self.result.setText(newResult())
            sleep(0.5)
然后在我的主要脚本中:

def main(self):
    self.TM=Machine(self.result)
    self.TM.ExecuteM(var1, var2)

但是它不起作用文本不会在每次迭代时更新,为什么?

如果在主线程中执行while循环,它将阻塞gui。所有事件都将排队,直到while循环终止,并且控制可以返回到事件循环。因此,您要么将阻塞while循环移动到单独的线程中,要么定期强制事件循环处理挂起的事件。在您的示例中,应该可以通过以下方式实现后者:

    def ExecuteM(self, Var1, Var2):
        while Var1 != 'stop':
            Var2 = Var2 + 3
            self.result.setText(newResult())
            QApplication.processEvents()
            sleep(0.5)

但这只是一个短期解决方案。也许最好是这样。

谢谢,我想我开始理解这个想法了。但当我尝试您的短期解决方案时,我得到:
QApplication.processEvents()name错误:未定义全局名称“QApplication”
…@Dadep。您需要导入它-或者可能使用
QtGui.QApplication
(或者PyQt5的
qtwidts.QApplication
)。。。啊,没错!(我同时在写评论)谢谢