我试图在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中的操作也是如此......它真的令人沮丧......
如果有人知道该做什么会很棒:)
答案 0 :(得分:5)
如果Python2与PyQt4一起使用,则默认情况下可以使用QString
和QVariant
等类。但是,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版本,这样您就不必再费心QString
和QVariant
。
请注意,在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的默认值。