如何在PyQt4中访问QGIS2.14的QString

2024-06-11 13:49:43 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个有点特殊的QGIS,但认为这是一种低水平,所以我在这里张贴。我肯定可以把这个移到gis.stackexchange.com网站如果那样更好的话。在

尝试使用QgsRasterCalculator,它似乎需要一个QString类型的对象作为两个参数。我试图创建一个QString(like described here),但得到:

import PyQt4
PyQt4.QtCore.QString('foo')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
AttributeError: 'module' object has no attribute 'QString'

因此,我尝试在第一个参数(calc = QgsRasterCalculator( 'demffac > 120', newStreams, 'GTiff', rFac.extent(), rFac.crs().authid(), rFac.height(), rFac.width(), entries))中使用常规字符串,得到:

{cd2}

我使用的是QGIS 2.14,它是documented as using QString(据我所知)。我试图使用sip包来重置(per these instructions),但QGIS的python控制台似乎不想更改(ValueError: API 'QString' has already been set to version 2)。在

有没有办法让我的QgsRasterCalculator()通话正常?谢谢你的任何信息!在

/=================编辑:我的QGIS对建议的响应的屏幕抓图========= enter image description here /================== 版本信息:

^{pr2}$

Tags: 对象com类型参数网站hasmodule低水平
1条回答
网友
1楼 · 发布于 2024-06-11 13:49:43

仔细观察回溯,似乎QgsRasterCalculator不需要使用QString。通过为前三个参数传递python字符串可以证明这一点,并且错误消息根本没有抱怨它们。相反,它抱怨第五个参数,它必须是int或{}对象,而您似乎正在传递unicode或{}对象。为什么要传入rFac.crs().authid()的返回值?当然,您应该传入rFac.crs(),而不是authid()(即{a1})。在


关于QString的潜在问题:

当与Python2一起使用时,PyQt4确实具有QString类,除非您采取显式的步骤来更改by using the sip module。问题开头的代码不是您实际运行的代码,因为它不会引发特定错误:

Python 2.7.15 (default, Jun 27 2018, 13:05:28)
[GCC 8.1.1 20180531] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import PyQt4
>>> PyQt4.QtCore.QString('foo')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'QtCore'

如果正确导入QtCore模块,代码可以正常工作:

^{pr2}$

请注意,单独导入PyQt4包是没有意义的。它只是一个空的命名空间(出于性能原因)惰性地导入其他模块。因此,您必须始终显式地导入Qt模块,就像我前面所做的那样。在

附言:

在问题的后半部分,pyqtapi似乎已经被更改为版本2,这将关闭对QString的支持。要重新打开它,您需要执行以下操作:

import sip
sip.setapi('QString', 1)

但是,在导入任何其他PyQt模块之前,必须先完成此步骤。在

相关问题 更多 >