首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AttributeError:“”QCoreApplication“”对象没有属性“”setQuitOnLastWindowClosed“”

AttributeError:“”QCoreApplication“”对象没有属性“”setQuitOnLastWindowClosed“”
EN

Stack Overflow用户
提问于 2021-04-13 05:12:05
回答 1查看 56关注 0票数 1

当我试图退出Qt事件循环时,有时会遇到这个错误。使用代码示例代码,

代码语言:javascript
复制
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_()

你有什么想法会输出这个错误响应吗?

代码语言:javascript
复制
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'

我没有用任何窗户。但这并不是每次都会发生,在运行一次之后,我通常不会再看到错误。

编辑:这可能是设置spyder首选项ipython控制台图形后端为'automatic‘,这可能使用Qt导致此错误,而不是设置为'inline’。我发现在注释掉app.quit()的同时使用app = QtWidgets.QApplication([])app.setQuitOnLastWindowClosed(True),让我们在使用自动设置时显示绘图,没有错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-13 05:26:24

你似乎正在使用一些特殊的环境(似乎是Spyder),在那里开发人员假设你正在使用QGuiApplication或QApplication作为具有setQuitOnLastWindowClosed方法的eventloop。一种解决方法是创建一个从QCoreApplication继承并具有该方法的类。

代码语言:javascript
复制
class CoreApplication(QtCore.QCoreApplication):
    def setQuitOnLastWindowClosed(self, quit):
        pass


maxcounts = 10
counter = []

app = CoreApplication([])
# ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67065743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档