0

我有一个双端队列类型列表(队列),我想在 QTextEdit 中显示和更新。MyForm 类中有一个函数 uuenda_kama 应该执行此操作(以及其他一些 s***)。当 textEdit 为空时,此函数的第一次传递,它就像一个魅力,所有必要的字段都被更新。但在第二遍时,由于添加了一些文本,它崩溃了,让我面对一个 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_())
4

1 回答 1

1

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

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

你不应该直接在主线程之外调用 gui 方法。

于 2011-12-18T02:42:52.710 回答