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
相关产品推荐
相关产品推荐

