gpt4 book ai didi

python - 在加载图层的函数最终加载图层之后,如何调用函数?

转载 作者:太空宇宙 更新时间:2023-11-03 21:33:39 26 4
gpt4 key购买 nike

我正在使用 pyqt5 制作一个 Qgis 3.4 插件,该插件应该加载一对图层并缩放到所选图层,但代码执行速度太快,在图层加载到 Qgis 之前就通过了缩放线。

代码如下:

def openFileNameDialog(self):

options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName, _ = QFileDialog.getOpenFileName(self,"QFileDialog.getOpenFileName()", "","All Files (*);;Shapefile's (*.shp)", options=options)
if fileName:
shape_name = fileName

shapelayer = QgsVectorLayer(shape_name, "project's shapefile", "ogr")
if not shapelayer:
self.statusBar().showMessage('shapefile is invalid')

else:


urlWithParams = 'url=urltoBaseMap'

rlayer = QgsRasterLayer(urlWithParams, 'BaseMap', 'wms')

if not rlayer.isValid():
self.statusBar().showMessage('Layer failed to load!')

QgsProject.instance().addMapLayer(rlayer)
QgsProject.instance().addMapLayer(shapelayer)

self.iface.setActiveLayer(shapelayer)

def layerzoom(self):

self.iface.zoomToActiveLayer()

def runboth(self):

self.openFileNameDialog()
#time.sleep(5)
self.layerzoom()

在加载图层的函数完成图层加载后,如何调用缩放函数?

我尝试过 time.sleep() 但它不会等待 openFileNameFialog() 完成,因此问题仍然存在。

最佳答案

根据 ekhumoro 的建议,通过在 openFileNameDialog() 内声明 stop_signal 解决了该问题。

stop_signal包含图层加载后将被调用的内容。

渲染完成后,必须在 openFileNameDialog 函数的末尾声明信号,将信号发送到 stop_signal 函数。

代码应该是这样的:

def openFileNameDialog(self):

"""
Code...
"""

def stop_signal():
self.layeropen()

"""
Code loading layers and whatever needed..
"""

self.iface.mapCanvas().renderComplete.connect(stop_signal)

关于python - 在加载图层的函数最终加载图层之后,如何调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53378498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com