我有一个双端队列类型列表(队列),我想在QTextEdit中显示和更新。
MyForm类中有一个函数uuenda_kama应该执行此操作(也可以执行其他操作)。当textEdit为空时,此功能的第一遍,它像一个 super 按钮一样工作,所有必填字段都将更新。但是在第二遍,因为其中添加了一些文本,它崩溃使我面对一个Visual Studio调试器。
尝试注释掉不同的部分,然后发现“self.ui.textEdit.clear()”行引起了此问题。它有什么问题,为什么它在首次通过时起作用?我该如何解决?
我现在拥有的代码:

class MyForm(QtGui.QMainWindow):
    ...
    def uuenda_kama(self):
        while True:
        ...
        if vana_que != list(que):
            self.ui.textEdit.clear()
            for i in que:
                self.ui.textEdit.append(i)
            vana_que = list(que)
        sleep(1)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = MyForm()
    uuendamine = Thread(target=myapp.uuenda_kama)
    uuendamine.start()
    myapp.show()
    sys.exit(app.exec_())

最佳答案

您不应该在运行qwidgets方法的整个应用程序之外创建标准python线程。相反,您应该有一个运行非GUI相关逻辑的QThread,然后当它希望主线程影响GUI时发出一个信号。

请参考另一个问题以获取一个很好的示例:Howto change progress by worker thread

您永远不要直接在主线程之外调用gui方法。

关于python - PyQt4 TextEdit.clear导致崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8549231/

10-12 22:19