![](/img/trans.png)
[英]AttributeError: 'AttributeError' object has no attribute 'To'
[英]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_()
有什么想法會 output 這個錯誤響應嗎?
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 導致此錯誤,而不是將其設置為“內聯”。 我發現使用app = QtWidgets.QApplication([])
和app.setQuitOnLastWindowClosed(True)
同時注釋掉app.quit()
讓 plot 在使用自動設置時顯示,沒有錯誤。
似乎您正在使用一些特殊的環境(似乎是 Spyder),開發人員假設您正在使用 QGuiApplication 或 QApplication 作為具有setQuitOnLastWindowClosed
方法的事件循環。 一種解決方法是創建一個繼承自QCoreApplication
並具有該方法的 class。
class CoreApplication(QtCore.QCoreApplication):
def setQuitOnLastWindowClosed(self, quit):
pass
maxcounts = 10
counter = []
app = CoreApplication([])
# ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.