我正在编写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)**
答案 0 :(得分:0)
我建议在终端/ 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将由{{ 3}}方法。
考虑上述解决方案是:
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())