PyQt 从 Python 2.7 增量迁移到 3.x 的最佳实践

Best Practice for PyQt for incremental migration from Python 2.7 to 3.x

我正在为 Py2/Py3 兼容性更新代码。一些原始的 Python 2.7 代码使用 PyQt4。我们将在用户系统上增量实施的标准 Python 3.7 安装与 PyQt4 不兼容。

在我的研究中,我发现了很多使 Python 2.7 与 PyQt5 很好地配合使用的复杂方法,但这是一个站不住脚的解决方案,因为这是交叉兼容性更新的全部原因是这样的:

我没有发现任何有助于使 Python 3.7 与 PyQt4 对话的东西,因此向后兼容的解决方案虽然更可取,但似乎也站不住脚,除非我(希望)弄错了。

另一种方法是修改代码以检查 Python 版本并使用 if/else 或 try/except 语句进行相应的导入。

我想知道 PyQt4/5 的交叉兼容编码的最好和最简单的方法是什么,这样用户(大多数不是开发人员)在更新时几乎没有困难,也不会需要对他们的系统进行更改以在为他们更新系统之前继续使用更新的程序。

虽然 [Py]Qt4 已过时,但我知道,在某种大型或特定环境中,在不久的将来不可能或不容易完成系统更新。 我建议您使用 Qt.py,这是一个 "shim",它可以(几乎)透明地为 [=21= 使用所有 Qt 绑定(PySide 1/2 和 PyQt 4/5) ] 2和3.

总体好处非常简单:您将能够使用 PyQt5 就绪代码,同时使其在仍然必须依赖 PyQt4 的旧系统上可用。

您需要做的最重要的工作是将所有 QWidget sub类 更改为 QtWidgets 模块的一部分而不是 QtGui,并记住 Qt.py 自动尝试使用 sip API v2(这使得所有 toPyObject 转换都不必要并且更加透明)。
请记住,有些 类 需要从当前绑定手动导入,显然在行为上存在一些差异,但除此之外,它会使整个迁移更加容易。