QGIS PyQt4缺少QString类

Hin*_*123 3 qstring pyqt pyqt4 qgis attributeerror

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

from PyQt4.QtCore import QString
Run Code Online (Sandbox Code Playgroud)

但它说:

ImportError: cannot import name QString
Run Code Online (Sandbox Code Playgroud)

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

import PyQt4.QtCore
PyQt4.QtCore.QString()
Run Code Online (Sandbox Code Playgroud)

from PyQt4 import QtCore
QtCore.QString()
Run Code Online (Sandbox Code Playgroud)

无论如何都不行.

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

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

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

ekh*_*oro 5

如果Python2与PyQt4一起使用,那么默认情况下类QString和的类QVariant将可用.但是,Python3的默认设置是消除这些类并使用等效的python类型.

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

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

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

from PyQt4 import QtCore
Run Code Online (Sandbox Code Playgroud)

如果QString在QGIS中不可用,那要么是因为它使用的是Python3,要么是因为它正在使用Python2和上面建议的切换API.

无论哪种方式,可能是您的问题最简单的解决将是空转的Python3版本,让你不再有打扰QStringQVariant.

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

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