【问题标题】:PyQt4 TextEdit.clear causes crashPyQt4 TextEdit.clear 导致崩溃
【发布时间】:2011-12-18 01:32:27
【问题描述】:

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

【问题讨论】:

  • 你为什么要使用标准的 python 线程来运行一个循环来调用你的 qt 小部件?这对我来说看起来不对。
  • 因为我觉得它没有错?起初它似乎工作得很好。会试试你的小费!

标签: python crash pyqt4 qtextedit


【解决方案1】:

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

有关一个很好的例子,请参阅另一个问题:Howto change progress by worker thread

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-23
    • 2020-12-02
    • 2013-11-11
    • 2011-01-24
    • 2015-02-23
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多