QGIS PyQt4缺少QString类

时间:2015-02-20 15:10:00

标签: pyqt pyqt4 qstring attributeerror qgis

我试图在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安装一样< / p>

当我在QGIS控制台中调用帮助(PyQt4.QtCore)时,它没有说明QString类,而Python IDLE中的操作也是如此......它真的令人沮丧......

如果有人知道该做什么会很棒:)

2 个答案:

答案 0 :(得分:5)

如果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

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

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

请注意,在PyQt5中,没有选项可以切换API,因此QString永远不会在那里可用。

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

答案 1 :(得分:1)

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