PyQt4中TextEdit.clear导致崩溃
我有一个双端队列类型的列表(也就是一个队列),我想在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来处理那些和界面无关的逻辑,然后在需要主线程来更新界面时发出一个信号。
可以参考这个问题,里面有个很好的例子:如何通过工作线程改变进度
你绝对不应该在主线程之外直接调用界面相关的方法。