Skip to main content

使 PySide/PyQt4 代码与 Qt5 一起工作(使用 PyQt5)

项目描述

qt_backport

qt_backport使基于 Qt4 的未经修改的 python 代码与 Qt5 一起工作。

更具体地说(目前),如果您安装了 PyQt5 并且可以正常工作,但想使用旧的 PyQt4 或 PySide 代码而无需进行任何转换工作,那么这个包适合您!

安装

  1. 如果有的话,卸载任何现有的 Qt4 包装器(PyQt4 或 PySide)。

  2. 安装 PyQt5

  3. 点安装 qt_backport

用法

qt_backport自动使“PyQt4”和“PySide”包都可用,它们的功能与旧 Qt4 版本一样,但实际上由 PyQt5 支持。

即:像这样的旧代码将按原样工作:

import PyQt4
from PyQt4 import QtCore
from PyQt4.QtGui import *  #<-- this is supported, but yuck

或者

import PySide
from PySide import QtCore
from PySide.QtGui import *  #<-- this is supported, but yuck

何时使用qt_backport

当您安装了现代 Qt5 包装器(目前只有 PyQt5)并尝试使用您在网络上找到的遗留代码示例学习 Qt 时,此包特别有用。

qt_backport的主要目的不是将您的应用程序从 Qt4 移植到 Qt5(如果可以的话,您最好进行转换),但它确实做得很好,并且绝对可以帮助您入门。

为什么完全需要qt_backport

当 Qt4 更新到 Qt5 时,对类组织进行了重大重组。此外,还有许多其他 API 更改。

最重要的变化之一是过去包含在“QtGui”中的大量类被分散到其他不同的位置。例如:所有的小部件都从 QtGui 中移出并放入一个名为 QtWidgets 的新模块中。尽管新位置更有意义,但它破坏了许多旧代码。qt_backport是一种使旧代码按原样工作的技巧。

在 Qt 4.x 到 Qt 5.2 的过渡中,还有更多的 API 更改(Qt 5.2 是撰写本文时的当前版本)。qt_backport处理其中许多更改,但可能尚未捕获所有这些更改。这种更改(由qt_backport处理)的一个简单示例是 QColor.dark() 在 Qt 4.3 中被删除并替换为 QColor.darker()。

请注意,虽然反向移植通常工作得很好,但您可能需要对旧代码进行额外的更改才能使其正常工作。这些更改取决于旧代码的年份。例如,当前不支持旧式信号/插槽连接。

注意:目前,唯一适用于 Qt5 的 Python 的 Qt 包装器是 PyQt5。将来这可能会改变(例如:当 PySide 升级到使用 Qt5 时)。

它是如何工作的?

qt_backport使用 PyQt5 包装 Qt(目前 Qt5 的唯一 python 包装器),但提供了一个模拟 PySide 和 PyQt4 API 的模拟层。安装qt_backport 会自动使 PySide 和 PyQt4 模拟器可用于导入。

这在视觉上更容易看到:

                   +-----------------------------------+
                   |                                   |
                   | Existing Python code that expects |
                   |     the PyQt4 or PySide API       |
                   |                                   |
                   +-------+------------------+--------+
                           |                  |
                          OLD          <with qt_backport>
                          WAY                 |
                           |            +-----+-------+
                           |            |             |
qt_backport                |            |  PySide or  |
Emulation layer:           |            |    PyQt4    |
                           |            |             |
                           |            +-----+-------+
                           |                  |
                  +--------+--------+   +-----+-------+
                  |                 |   |             |
Wrapper layer:    | PySide or PyQt4 |   |   PyQt5     |
                  |                 |   |             |
                  +--------+--------+   +-----+-------+
                           |                  |
                      +----+-----+        +---+-----+
                      |          |        |         |
Qt library layer:     |   Qt4    |        |   Qt5   |
                      |          |        |         |
                      +----------+        +---------+

去做:

  • 支持旧式连接(即:connect(app, SIGNAL(), app, SLOT()

  • 支持更多已知的 api 更改
    • API 变更覆盖率目前不是 100%,主要是由对某些类/方法的需求驱动的。不过,目前的覆盖率相当不错。

    • 此处介绍了其他潜在的变化:http: //qt-project.org/doc/qt-5/portingguide.html

  • 无数个 API 补丁的单元测试

执照

麻省理工学院。请参阅许可证文件。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

qt_backport-0.1.3.tar.gz (15.7 kB 查看哈希

已上传 source