PyQt6中初始化QApplication后仍报QWidget创建顺序错误的问题咨询
PyQt6中初始化QApplication后仍报QWidget创建顺序错误的问题咨询
嗨,这个问题我之前折腾过好一会儿,终于搞懂原因啦!
先来看下你这段出问题的代码:
import sys from PyQt6.QtWidgets import QApplication from qpageview import View app = QApplication(sys.argv) view = View() view.show() sys.exit(app.exec())
你疑惑明明先写了QApplication的创建代码为啥还报错,其实问题出在导入语句的时机上!
PyQt6对QApplication的创建顺序检查比PyQt5严格多了——在PyQt6里,任何会触发Qt GUI对象初始化的操作,都必须在QApplication实例化之后进行。而你用from qpageview import View的时候,qpageview这个库的模块内部可能有一些代码在导入阶段就悄悄创建了依赖于QApplication的对象(比如某些全局的GUI相关实例),这时候你还没创建QApplication,自然就触发那个"QWidget: Must construct a QApplication before a QWidget"错误了。PyQt5对这种提前初始化的容忍度更高,所以没出现问题。
那怎么解决呢?很简单,把导入View的语句挪到创建QApplication之后就行:
import sys from PyQt6.QtWidgets import QApplication app = QApplication(sys.argv) from qpageview import View # 移到QApplication创建之后导入 view = View() view.show() sys.exit(app.exec())
这样一来,等QApplication完全创建好之后再导入qpageview的View,模块内部的初始化代码就能在正确的环境下运行,就不会再报顺序错误啦~
内容来源于stack exchange
相关产品推荐
相关产品推荐

