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一起使用,那么类像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
如果 QString
在 QGIS 中不可用,那是因为它正在使用 Python3,或者因为它正在使用 Python2 并按照上面的建议切换 API。
无论哪种方式,解决您问题的最简单方法可能是 运行 IDLE 的 Python3 版本,这样您就不必再为 QString
和 QVariant
.
请注意,在 PyQt5 中,没有切换 API 的选项,因此 QString
将永远不可用。
另请注意,对 Qt4 的官方支持将于今年结束。因此,如果您想要面向未来的新 PyQt 应用程序,您的首选应该是 PyQt5 + Python3,除非您有充分的理由不这样做(例如,不可避免的依赖性)。
我试图在 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一起使用,那么类像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
如果 QString
在 QGIS 中不可用,那是因为它正在使用 Python3,或者因为它正在使用 Python2 并按照上面的建议切换 API。
无论哪种方式,解决您问题的最简单方法可能是 运行 IDLE 的 Python3 版本,这样您就不必再为 QString
和 QVariant
.
请注意,在 PyQt5 中,没有切换 API 的选项,因此 QString
将永远不可用。
另请注意,对 Qt4 的官方支持将于今年结束。因此,如果您想要面向未来的新 PyQt 应用程序,您的首选应该是 PyQt5 + Python3,除非您有充分的理由不这样做(例如,不可避免的依赖性)。