QGIS PyQt4 缺少 QString class

QGIS PyQt4 missing QString class

我试图在 QGIS Python 控制台中使用 QString。

from PyQt4.QtCore import QString

但上面写着:

ImportError: cannot import name QString

在我的 Python IDLE 中它工作正常,但我知道 QGIS 自带 PyQt4。这里可能是什么问题?我能解决吗?

import PyQt4.QtCore
PyQt4.QtCore.QString()

from PyQt4 import QtCore
QtCore.QString()

无论如何都行不通。

我正考虑将 QtCore4.dll 从我自己的 PyQt4 安装复制到 QGIS,但 QGIS 使用 QtCore.prl 和 QtCore4.lib 而不是 QtCore.pyd 和 QtCore4.dll,就像我的 PyQt4 安装使用的一样

当我在 QGIS 控制台中调用 help(PyQt4.QtCore) 时,它对 QString class 只字未提,而 Python IDLE 中的操作是相同的......这真的很令人沮丧..

如果有人知道该怎么做就太好了:)

我没有使用过 QGIS,但这可能是因为 PyQt 已经切换到新的 API 版本 2(参见 http://pyqt.sourceforge.net/Docs/PyQt4/incompatible_apis.html)。在新的 API 中,任何返回或采用 QString 的 Qt 函数都采用 Python 本机字符串。新的 API 更方便,并且是 PyQt5 的默认值。

如果Python2与PyQt4一起使用,那么类像QStringQVariant将默认可用。但是,Python3 的默认设置是消除这些 类 并使用等效的 python 类型。

可以使用 sip module 覆盖这些默认值,如下所示:

import sip
# switch on QString in Python3
sip.setapi('QString', 1)

# switch off QString in Python2
sip.setapi('QString', 2)

from PyQt4 import QtCore

如果 QString 在 QGIS 中不可用,那是因为它正在使用 Python3,或者因为它正在使用 Python2 并按照上面的建议切换 API。

无论哪种方式,解决您问题的最简单方法可能是 运行 IDLE 的 Python3 版本,这样您就不必再为 QStringQVariant.

请注意,在 PyQt5 中,没有切换 API 的选项,因此 QString 将永远不可用。

另请注意,对 Qt4 的官方支持将于今年结束。因此,如果您想要面向未来的新 PyQt 应用程序,您的首选应该是 PyQt5 + Python3,除非您有充分的理由不这样做(例如,不可避免的依赖性)。