PyQt开发QGIS插件如何减少控件初始化场景下的冗余代码
最优实现方案
你只需要在构造方法绑定完信号后,手动调用一次getLayerInfo方法即可,完全不需要复制冗余代码,同时可以给getLayerInfo加空值判断避免无匹配图层时插件崩溃:
class CreateSomething(QtWidgets.QDialog, FORM_CLASS): def __init__(self, parent=None): """Constructor.""" super(CreateSomething, self).__init__(parent) self.setupUi(self) # 仅在下拉框中展示多边形图层 self.cmbLyrSelect.setFilters(QgsMapLayerProxyModel.PolygonLayer) # 绑定图层切换信号 self.cmbLyrSelect.layerChanged.connect(self.getLayerInfo) # 初始化时手动调用一次,填充默认值 self.getLayerInfo() # 图层变更/初始化时填充控件内容 def getLayerInfo(self): currLyr = self.cmbLyrSelect.currentLayer() # 加空判断,避免无多边形图层时程序报错 if not currLyr: self.linLyrLoc.clear() self.cmbLyrFields.setLayer(None) return # 获取图层质心坐标 lyrLoc = currLyr.sourceExtent().center().toString(3) self.linLyrLoc.setText(str(lyrLoc)) # 填充图层字段下拉框 self.cmbLyrFields.setLayer(currLyr)
方案说明
- 核心逻辑完全复用
getLayerInfo方法,没有任何冗余代码,后续修改逻辑只需要调整这一个方法即可 - 新增的空值判断覆盖了项目中无多边形图层的边界场景,避免插件运行时崩溃
- 初始化时的手动调用刚好触发默认选中图层的内容填充,效果和用户手动切换图层完全一致
内容的提问来源于stack exchange,提问作者BallpenMan
相关产品推荐
相关产品推荐

