Python 3.x Python3.2和Qt之间的不兼容?

Python 3.x Python3.2和Qt之间的不兼容?,python-3.x,pyqt,pyqt4,compatibility,Python 3.x,Pyqt,Pyqt4,Compatibility,我对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 使用Python2.7,一切都可以正常工作。 我的代码中的错误在哪里?请查看 QString类被实现为 自

我对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
使用Python2.7,一切都可以正常工作。 我的代码中的错误在哪里?

请查看

QString类被实现为 自动转换为Python字符串或从Python字符串转换为Python字符串。此外 None被转换为空QString。但是,不允许使用空QString 已转换为空Python字符串(而不是无)。(这是因为 Qt通常返回空QString,而它可能会返回空QString 空QString。)

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


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

为了“清理”语言,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的详细信息,请参阅