Ještě nejsem výřečný dost na to, být konkrétní s mým název, ale to je v podstatě problém. Dělám QGISU plugin s PyQt.
SKRIPT
class CreateSomething(QtWidgets.QDialog, FORM_CLASS):
def __init__(self, parent=None):
"""Constructor."""
super(CreateSomething, self).__init__(parent)
self.setupUi(self)
# Only select polygon layers in the layer combo box
self.cmbLyrSelect.setFilters(QgsMapLayerProxyModel.PolygonLayer)
# Emits a signal and connects to a function when layer is changed
self.cmbLyrSelect.layerChanged.connect(self.getLayerInfo)
# Function to get layer info if layer changed
def getLayerInfo(self):
# Selected/current layer in the combo box
currLyr = self.cmbLyrSelect.currentLayer()
# Gets layer centroid
lyrLoc = self.cmbLyrSelect.currentLayer().sourceExtent().center().toString(3)
# Writes layer centroid to line edit
self.linLyrLoc.setText(str(lyrLoc))
# Populates combo box with fields of current layer
self.cmbLyrFields.setLayer(currLyr)
Pokud plugin je otevřel poprvé, nebude mít potřebné widgety naplněné, protože cmbLyrSelect
pouze widget emituje signál, když uživatel změní vrstvu.
První otevřený
Pokud je vrstva změněna
ŘEŠENÍ - duplicitní kód v getLayerInfo
metoda __init__
metoda tak, že widgety jsou vyplněny jednou plugin spustí.
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)
currLyr = self.cmbLyrSelect.currentLayer()
lyrLoc = self.cmbLyrSelect.currentLayer().sourceExtent().center().toString(3)
self.linLyrLoc.setText(str(lyrLoc))
self.cmbLyrFields.setLayer(currLyr)