我正在使用 PyQt5 和 QGIS 编写一个独立的应用程序。我想出了如何找到 QGIS Python 库,我用 制作了一些 GUI QgsMapCanvas
,我向它加载了一个测试 shapefile。一切正常。但是当我尝试从 Postgresql 加载矢量图层时,什么也没发生。layer.isValid()
函数返回False
,但False
根本无助于解决问题。我搜索了一种获取错误的方法,但没有得到任何东西。当我将相同的代码放入 QGIS 中的 Python 控制台时,一切正常。图层已加载并添加到地图画布中。我什至不知道该做什么以及在哪里寻找解决方案。
这是代码中不起作用的部分:
import sys
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QApplication
from qgis.core import QgsDataSourceUri, QgsVectorLayer, QgsProject
from qgis.gui import QgsMapCanvas
app = QApplication(sys.argv)
layout = QVBoxLayout()
map_canvas = QgsMapCanvas()
layout.addWidget(map_canvas)
widget = QWidget()
widget.setLayout(layout)
source = QgsDataSourceUri()
source.setConnection('localhost', '5432', 'my_database', 'username', 'password')
source.setDataSource('public', 'build', 'geom', '', 'id')
vlayer = QgsVectorLayer(source.uri(False), 'build_layer', 'postgres')
if not vlayer.isValid():
print('invalid layer')
QgsProject.instance().addMapLayer(vlayer)
map_canvas.setLayers([vlayer])
map_canvas.setExtent(vlayer.extent())
widget.show()
exit(app.exec_())
它显示一个带有空地图画布的窗口并将invalid layer
消息打印到终端。我尝试了不同的论点source.setDataSource
。我试过'public'
了,只是''
代替它。我尝试了 3 个参数和 5 个参数。我尝试source.uri
了False
有无。我尝试了一切。不要忘记我将 shapefile 加载到地图画布中。这意味着 PyQGIS 可以工作。
问题是什么?如何解决?当发生这样的事情时,我怎么能得到加载错误?