0

我正在使用 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.uriFalse有无。我尝试了一切。不要忘记我将 shapefile 加载到地图画布中。这意味着 PyQGIS 可以工作。

问题是什么?如何解决?当发生这样的事情时,我怎么能得到加载错误?

4

0 回答 0