问题描述
我正在使用 qgis 和 pyqt5 编写一个 python 应用程序。在应用程序中,我创建了一个添加图层的工具:
def addLayer(self):
layer = QgsvectorLayer('test.shp','test','ogr')
if not layer.isValid():
print("Layer Failed to load!")
else:
QgsProject.instance().addMapLayer(layer)
self.canvas.setExtent(layer.extent())
for field in layer.fields():
print(field.name(),field.typeName())
应用程序启动时,图层不显示在地图上。虽然错误没有崩溃,但也显示了加载的shapefile中的数据名称和数据类型,这意味着图层添加工具本身正在工作。尝试更改 shapefile,它没有帮助。我试图在打开应用程序时规定层的加载 - 没有。所有应用代码:
from PyQt5.QtWidgets import QApplication,qframe,qgridLayout,QMainWindow,QVBoxLayout
from PyQt5.QtGui import QPainter,QColor,QFont
from PyQt5.QtCore import pyqtSignal
from qgis.gui import QgsMapCanvas,QgsMapToolPan,QgsMapToolZoom
from qgis.core import QgsApplication,QgsvectorLayer,QgsProject,QgsMarkerSymbol
import sys,os
from mainwindow_ui import Ui_MainWindow
app = QApplication([])
qgs = QgsApplication([],False)
qgs.setPrefixPath("C:/OSGeo4W64/apps/qgis",True)
qgs.initQgis()
class MainWindow(QMainWindow,Ui_MainWindow):
triggered = pyqtSignal()
def __init__( self ):
QMainWindow.__init__( self )
self.setupUi( self )
self.setwindowTitle('QGIS Demo')
self.canvas = QgsMapCanvas()
self.canvas.setCanvasColor(QColor( 200,200,255 ))
self.canvas.enableAntiAliasing(True)
self.canvas.show()
self.layout = QVBoxLayout(self.frame)
self.layout.addWidget(self.canvas)
self.actionAdd_Layer.triggered.connect(self.addLayer)
self.actionZoom_In.triggered.connect(self.zoomIn)
self.actionZoom_Out.triggered.connect(self.zoomOut)
self.actionPan.triggered.connect(self.pan)
self.actionZoom_Full.triggered.connect(self.zoomFull)
self.toolbar = self.addToolBar("Map")
self.toolbar.addAction(self.actionAdd_Layer);
self.toolbar.addAction(self.actionZoom_In);
self.toolbar.addAction(self.actionZoom_Out);
self.toolbar.addAction(self.actionPan);
self.toolbar.addAction(self.actionZoom_Full);
self.toolPan = QgsMapToolPan(self.canvas)
self.toolPan.setAction(self.actionPan)
self.toolZoomIn = QgsMapToolZoom(self.canvas,False) # false = уменьшить
self.toolZoomIn.setAction(self.actionZoom_In)
self.toolZoomOut = QgsMapToolZoom(self.canvas,True) # true = увеличить
self.toolZoomOut.setAction(self.actionZoom_Out)
def zoomIn( self ):
self.canvas.setMapTool(self.toolZoomIn)
def zoomOut( self ):
self.canvas.setMapTool(self.toolZoomOut)
def pan( self ):
self.canvas.setMapTool(self.toolPan)
def zoomFull( self ):
self.canvas.zoomToFullExtent()
def addLayer(self):
layer = QgsvectorLayer('test.shp','ogr')
if not layer.isValid():
print("Layer Failed to load!")
else:
# Добавить слой в реестр
QgsProject.instance().addMapLayer(layer)
# Установить охват карты равным охвату слоя
self.canvas.setExtent(layer.extent())
for field in layer.fields():
print(field.name(),field.typeName())
def main(app):
wnd = MainWindow()
wnd.show()
app.exec()
if __name__ == "__main__":
main(app)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)