在一个应用程序中同时支持 PyQt4 和 PyQt5 的常用方法是什么?
What't the common way to support both PyQt4 and PyQt5 in one application?
我想制作一个适用于 PyQt4 和 PyQt5 的应用程序。
首先,我可以创建兼容性模块 compat.py
,如果找不到 PyQt5,它将回退到 PyQt4:
try:
__import__('PyQt5')
use_pyqt5 = True
except ImportError:
use_pyqt5 = False
if use_pyqt5:
from PyQt5.QtGui import QIcon as QIcon
else:
from PyQt4.QtGui import QIcon as QIcon
之后我可以从该模块导入 Qt 相关的 类 并检查 compat.use_pyqt5
其中 PyQt4/5 在逻辑上有差异。
问题是我想让 Qt 版本可配置并依赖于命令行选项——它们加载在不同的模块中。
问题不在于同时支持 PyQt4 和 PyQt5。它真正要问的是:如何全局访问命令行选项?
一种解决方案是向处理命令行选项的模块添加一个 options
对象。该对象可以是一个简单的命名空间,用于存储读入的任何选项,并以其他方式提供适当的默认值。然后,您只需要确保 options
对象在 被可能需要它的任何其他模块导入之前 完全初始化。
有了这个,你就可以做这样的事情了:
from utils import options
use_pyqt5 = False
if options.try_pyqt5:
try:
import PyQt5
use_pyqt5 = True
except ImportError:
pass
我想制作一个适用于 PyQt4 和 PyQt5 的应用程序。
首先,我可以创建兼容性模块 compat.py
,如果找不到 PyQt5,它将回退到 PyQt4:
try:
__import__('PyQt5')
use_pyqt5 = True
except ImportError:
use_pyqt5 = False
if use_pyqt5:
from PyQt5.QtGui import QIcon as QIcon
else:
from PyQt4.QtGui import QIcon as QIcon
之后我可以从该模块导入 Qt 相关的 类 并检查 compat.use_pyqt5
其中 PyQt4/5 在逻辑上有差异。
问题是我想让 Qt 版本可配置并依赖于命令行选项——它们加载在不同的模块中。
问题不在于同时支持 PyQt4 和 PyQt5。它真正要问的是:如何全局访问命令行选项?
一种解决方案是向处理命令行选项的模块添加一个 options
对象。该对象可以是一个简单的命名空间,用于存储读入的任何选项,并以其他方式提供适当的默认值。然后,您只需要确保 options
对象在 被可能需要它的任何其他模块导入之前 完全初始化。
有了这个,你就可以做这样的事情了:
from utils import options
use_pyqt5 = False
if options.try_pyqt5:
try:
import PyQt5
use_pyqt5 = True
except ImportError:
pass