【问题标题】:QGIS PyQt4 missing QString classQGIS PyQt4 缺少 QString 类
【发布时间】:2015-04-22 07:41:10
【问题描述】:

我试图在 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 类只字未提,而 Python IDLE 中的操作也是如此......这真的很令人沮丧......

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

【问题讨论】:

    标签: pyqt pyqt4 qstring attributeerror qgis


    【解决方案1】:

    如果 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和切换的apis,如上所示。

    无论哪种方式,可能最简单的修复问题是运行Python3版本的空闲,这样你就不再有QStringQVariant

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

    另外请注意,对 Qt4 的官方支持将于今年结束。因此,如果您想要未来的新的PyQt应用程序,您的首选应该是Pyqt5 + Python3,除非您有正常做的好理由(例如不可避免的依赖项)。

    【讨论】:

    • Unfortunatley QGIS仅支持Python2只有Pyqt4 ...但谢谢!在 Python2 中关闭 QString 对我有用!
    【解决方案2】:

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

    【讨论】:

    • 感谢您的回答!
    猜你喜欢
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2010-11-26
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多