簡體   English   中英

AttributeError: 'QCoreApplication' object 沒有屬性 '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_()

有什么想法會 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM