【问题标题】:Incompatibility between Python 3.2 and Qt?Python 3.2 和 Qt 不兼容?
【发布时间】:2012-01-08 15:05:31
【问题描述】:

我在使用 Python 3.2 和 PyQt 4.8.6 时遇到问题 似乎 Python 3.2 找不到导入。 尤其是“Q”方法。例如下面的 QString。

from PyQt4 import QtCore, QtGui
try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

使用 Python 2.7 一切正常。 我的代码哪里出错了?

【问题讨论】:

    标签: python-3.x pyqt pyqt4 compatibility


    【解决方案1】:

    为了“清理”语言,Python3 进行了许多不兼容的更改,并且在某种程度上,PyQt 通过引入一些 API 的“更 Pythonic”版本也做了同样的事情。但是对于 Python2 Python3,可以逐类选择这些不同的 API 版本,因此唯一真正的区别是为每个 Python 版本选择的默认值。

    在 Python2 中,QString 的默认 API 版本为“v1”,将其实现为 Python 类型;在 Python3 中,默认值为“v2”,它会自动与适当的 Python 字符串对象相互转换。

    可以使用sip 包中的setapi 函数来选择API 版本。因此,要继续在您的应用程序中使用 QString 类,只需确保在首次导入 PyQt 模块之前设置了适当的版本:

    import sip
    sip.setapi('QString', 1)
    
    from PyQt4 import QtCore, QtGui
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        _fromUtf8 = lambda s: s
    

    有关可以通过这种方式设置的所有 API 的详细信息,请参阅here

    【讨论】:

      【解决方案2】:

      看看notes about Python 3 in the PyQt Reference Guide

      QString 类被实现为一个映射类型,即 自动与 Python 字符串相互转换。另外一个 None 被转换为空 QString。然而,一个空的 QString 是 转换为空的 Python 字符串(而不是无)。 (这是因为 当 Qt 可能应该返回一个 空 QString。)

      我还没有将任何代码移至 Python 3,但我相信这个想法是使用普通的 Python 字符串而不是 QStrings。 PyQt 将接受它们,并且它们已经在 Python 3 中支持 unicode。通常 PyQt 函数会返回 QString,它会在 Python 3 下返回常规的 Python 字符串。

      查看链接页面上的其他差异。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多