PyQt4中TextEdit.clear导致崩溃

0 投票
1 回答
2311 浏览
提问于 2025-04-17 08:34

我有一个双端队列类型的列表(也就是一个队列),我想在QTextEdit中显示和更新它。我的类MyForm里面有一个函数uuenda_kama,应该负责这个功能(还有其他一些事情)。第一次调用这个函数时,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_())

1 个回答

2

你不应该在整个应用程序之外创建一个标准的Python线程来运行你的qwidget方法。相反,你应该使用QThread来处理那些和界面无关的逻辑,然后在需要主线程来更新界面时发出一个信号。

可以参考这个问题,里面有个很好的例子:如何通过工作线程改变进度

你绝对不应该在主线程之外直接调用界面相关的方法。

撰写回答