You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt6中枚举是否可选?为何PyQt5格式代码可正常运行

问题:PyQt5格式代码为何能在PyQt6环境中正常运行?

我在MacOS Sonoma 14.5系统、Python 3.11版本的同一虚拟环境中运行两个基于PyQt6.5.1的Python程序,两者均可正常执行。

其中一个程序采用PyQt6的QMessageBox枚举写法:

msgBox = QMessageBox(parent=self)
msgBox.setText('WHOOPS - Must have at least one (1) joystick attached')
msgBox.setStandardButtons(QMessageBox.StandardButton.Ok)
msgBox.setIcon(QMessageBox.Icon.Warning)
msgBox.exec()

另一个程序则使用PyQt5格式的写法:

msgBox = QMessageBox(parent=self)
msgBox.setText('Whoops - Upload destination not set.\n' + 
    'Save animation file to implicitly set or\n' +
    'Edit metadata to explicitly set.')
msgBox.setStandardButtons(QMessageBox.Ok)
msgBox.setIcon(QMessageBox.Information)
ret = msgBox.exec_()    

但我并未安装PyQt5,验证结果如下:

> pip freeze | grep -i pyqt
PyQt6==6.5.1
PyQt6-Qt6==6.5.1
PyQt6-sip==13.5.1

> python
>>> from PyQt5.QtCore import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'PyQt5'
>>> 

我发现第一个程序若省略StandardButton和Icon枚举限定符会运行失败,而第二个程序的PyQt5写法却能正常运行。我原本以为需要将40处QMessageBox实例改为PyQt6格式,但目前代码运行正常。

两个程序顶部都有兼容PyQt5和PyQt6的导入代码:

# Import local version of PyQt, either 5 or 6
usedPyQt = None
try:
    # PyQt5 import block for all widgets
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from PyQt5 import QtMultimedia as qm
    usedPyQt = 5
except:
    try:
        # PyQt6 import block for all widgets
        from PyQt6.QtCore import *
        from PyQt6.QtGui import *
        from PyQt6.QtWidgets import *
        from PyQt6 import QtMultimedia as qm
        usedPyQt = 6
    except:
        sys.stderr.write('WHOOPS - Unable to find PyQt5 or PyQt6 - Quitting\n')
        exit(10)

请问为何PyQt5格式的代码在PyQt6环境中可以正常运行?我认为这不符合预期。

内容的提问来源于stack exchange,提问作者steelheadjw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:57:16