AttributeError: 'QCoreApplication' object has no attribute 'setQuitOnLastWindowClosed'
AttributeError: 'QCoreApplication' object has no attribute 'setQuitOnLastWindowClosed'
当我尝试退出 Qt 事件循环时,有时会遇到此错误。使用代码示例代码,
from PyQt5 import QtCore, QtSerialPort
maxcounts = 10
counter = []
app = QtCore.QCoreApplication([])
serial_port = QtSerialPort.QSerialPort('COM3')
serial_port.setBaudRate(QtSerialPort.QSerialPort.Baud115200)
serial_port.open(QtCore.QIODevice.ReadWrite)
serial_port.setDataTerminalReady(1)
serial_port.setDataTerminalReady(0)
serial_port.setDataTerminalReady(1)
def handle_ready_read():
while serial_port.canReadLine():
resp = serial_port.readLine().data().decode().strip()
if len(counter) == maxcounts:
print('closing')
serial_port.setDataTerminalReady(0)
serial_port.setDataTerminalReady(1)
serial_port.setDataTerminalReady(0)
serial_port.close()
app.quit()
counter.append(1)
if resp == 'end':
print('closing')
serial_port.setDataTerminalReady(0)
serial_port.setDataTerminalReady(1)
serial_port.setDataTerminalReady(0)
serial_port.close()
app.quit()
serial_port.readyRead.connect(handle_ready_read)
app.exec_()
它会输出这个错误响应有什么想法吗?
ERROR:tornado.application:Exception in callback functools.partial(<function Kernel.enter_eventloop.<locals>.advance_eventloop at 0x000001DD311F8280>)
Traceback (most recent call last):
File "C:\Users\me\Anaconda3\lib\site-packages\tornado\ioloop.py", line 741, in _run_callback
ret = callback()
File "C:\Users\me\Anaconda3\lib\site-packages\ipykernel\kernelbase.py", line 314, in advance_eventloop
eventloop(self)
File "C:\Users\me\Anaconda3\lib\site-packages\ipykernel\eventloops.py", line 131, in loop_qt5
return loop_qt4(kernel)
File "C:\Users\me\Anaconda3\lib\site-packages\ipykernel\eventloops.py", line 117, in loop_qt4
kernel.app.setQuitOnLastWindowClosed(False)
AttributeError: 'QCoreApplication' object has no attribute 'setQuitOnLastWindowClosed'
我没有使用任何 windows。不过,这种情况并非每次都发生,在 运行 之后,我通常不会再看到错误。
编辑:可能是将 spyder 首选项 ipython 控制台图形后端设置为可能使用 Qt 的 'automatic' 导致此错误,而不是将其设置为 'inline'。我发现在注释掉 app.quit()
的同时使用 app = QtWidgets.QApplication([])
和 app.setQuitOnLastWindowClosed(True)
让我们在使用自动设置时显示情节,没有错误。
似乎您正在使用一些特殊的环境(似乎是 Spyder),开发人员假设您正在使用 QGuiApplication 或 QApplication 作为具有 setQuitOnLastWindowClosed
方法的事件循环。解决方法是创建一个继承自 QCoreApplication
并具有该方法的 class。
class CoreApplication(QtCore.QCoreApplication):
def setQuitOnLastWindowClosed(self, quit):
pass
maxcounts = 10
counter = []
app = CoreApplication([])
# ...
当我尝试退出 Qt 事件循环时,有时会遇到此错误。使用代码示例代码,
from PyQt5 import QtCore, QtSerialPort
maxcounts = 10
counter = []
app = QtCore.QCoreApplication([])
serial_port = QtSerialPort.QSerialPort('COM3')
serial_port.setBaudRate(QtSerialPort.QSerialPort.Baud115200)
serial_port.open(QtCore.QIODevice.ReadWrite)
serial_port.setDataTerminalReady(1)
serial_port.setDataTerminalReady(0)
serial_port.setDataTerminalReady(1)
def handle_ready_read():
while serial_port.canReadLine():
resp = serial_port.readLine().data().decode().strip()
if len(counter) == maxcounts:
print('closing')
serial_port.setDataTerminalReady(0)
serial_port.setDataTerminalReady(1)
serial_port.setDataTerminalReady(0)
serial_port.close()
app.quit()
counter.append(1)
if resp == 'end':
print('closing')
serial_port.setDataTerminalReady(0)
serial_port.setDataTerminalReady(1)
serial_port.setDataTerminalReady(0)
serial_port.close()
app.quit()
serial_port.readyRead.connect(handle_ready_read)
app.exec_()
它会输出这个错误响应有什么想法吗?
ERROR:tornado.application:Exception in callback functools.partial(<function Kernel.enter_eventloop.<locals>.advance_eventloop at 0x000001DD311F8280>)
Traceback (most recent call last):
File "C:\Users\me\Anaconda3\lib\site-packages\tornado\ioloop.py", line 741, in _run_callback
ret = callback()
File "C:\Users\me\Anaconda3\lib\site-packages\ipykernel\kernelbase.py", line 314, in advance_eventloop
eventloop(self)
File "C:\Users\me\Anaconda3\lib\site-packages\ipykernel\eventloops.py", line 131, in loop_qt5
return loop_qt4(kernel)
File "C:\Users\me\Anaconda3\lib\site-packages\ipykernel\eventloops.py", line 117, in loop_qt4
kernel.app.setQuitOnLastWindowClosed(False)
AttributeError: 'QCoreApplication' object has no attribute 'setQuitOnLastWindowClosed'
我没有使用任何 windows。不过,这种情况并非每次都发生,在 运行 之后,我通常不会再看到错误。
编辑:可能是将 spyder 首选项 ipython 控制台图形后端设置为可能使用 Qt 的 'automatic' 导致此错误,而不是将其设置为 'inline'。我发现在注释掉 app.quit()
的同时使用 app = QtWidgets.QApplication([])
和 app.setQuitOnLastWindowClosed(True)
让我们在使用自动设置时显示情节,没有错误。
似乎您正在使用一些特殊的环境(似乎是 Spyder),开发人员假设您正在使用 QGuiApplication 或 QApplication 作为具有 setQuitOnLastWindowClosed
方法的事件循环。解决方法是创建一个继承自 QCoreApplication
并具有该方法的 class。
class CoreApplication(QtCore.QCoreApplication):
def setQuitOnLastWindowClosed(self, quit):
pass
maxcounts = 10
counter = []
app = CoreApplication([])
# ...