【问题标题】:while write data to QTextEdit, when close window, it show error将数据写入QTextEdit时,关闭窗口时显示错误
【发布时间】:2019-07-17 07:08:58
【问题描述】:

我正在编写一个 pyqt5 演示,同时在计时器事件中将数据写入 QTextEdit,当关闭窗口时,它会显示错误

from PyQt5.QtSerialPort import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.msgTE = QTextEdit()
        self.msgTE.setReadOnly(True)


        layout = QGridLayout()
        layout.addWidget(self.msgTE, 0, 0, 1, 2)


        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

        self.startTimer(10)



    def timerEvent(self, *event):
        QApplication.processEvents()
        self.msgTE.insertPlainText('12')


    def closeEvent(self, *args, **kwargs):
        self.killTimer()


app = QApplication(sys.argv)
demo = MainWindow()
demo.show()
app.exec()

** 输出:进程完成,退出代码为 -1073740791 (0xC0000409)**

【问题讨论】:

标签: python pyqt pyqt5 qtextedit


【解决方案1】:

我建议在终端/CMD 中执行脚本,因为许多 IDE 不处理 Qt 异常,如果您这样做了,那么您应该获得以下信息:

Traceback (most recent call last):
  File "main.py", line 34, in closeEvent
    self.killTimer()
TypeError: killTimer(self, int): not enough arguments

这告诉我们killTimer() 需要一个参数,在这种情况下,它是与计时器相关联的 id,因为您可以启动多个计时器,而您只想停止一个,该 id 将通过 startTimer() 方法返回.

考虑到上面的解决方案是:

from PyQt5 import QtWidgets


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        self.msgTE = QtWidgets.QTextEdit(readOnly=True)

        widget = QtWidgets.QWidget()

        layout = QtWidgets.QGridLayout(widget)
        layout.addWidget(self.msgTE, 0, 0)

        self.setCentralWidget(widget)

        self.m_timer_id = self.startTimer(10)

    def timerEvent(self, event):
        if event.timerId() == self.m_timer_id:
            self.msgTE.insertPlainText("12")
        super().timerEvent(event)

    def closeEvent(self, event):
        self.killTimer(self.m_timer_id)
        super().closeEvent(event)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    demo = MainWindow()
    demo.show()
    sys.exit(app.exec())

【讨论】:

  • 我试试你的方法,效果很好,IDE没有捕获pyqt异常。
  • @jiechen 如果我的回答对您有帮助,别忘了标记为正确,如果您不知道该怎么做,请查看tour
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多