我有一个deque类型列表(队列),我想在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_())
答案 0 :(得分:1)
你不应该在整个应用程序之外创建一个标准的python线程来运行qwidgets上的方法。相反,你应该有一个运行非gui相关逻辑的QThread,然后当它希望主线程影响GUI时发出一个信号
请参阅此其他问题以获得一个好例子:Howto change progress by worker thread
你永远不应该直接在主线程之外调用gui方法。