我有一个双端队列类型列表(队列),我想在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/