Več

Vrni seznam izbranih elementov QListWidget PyQt QGIS

Vrni seznam izbranih elementov QListWidget PyQt QGIS


Malce sem zmeden (sem novinec), kako najti seznam samo izbranih elementov QListWidget (v vtičniku QGIS).

Nastavil semmanageGuidelujejo na ta način:

def manageGui (self): selectedLayers = [] # Poskus vzpostavitve seznamaWidgetView self.listWidget.setEditTriggers (QtGui.QAbstractItemView.DoubleClicked | QtGui.QAbstractItemView.EditKeyPressViewViewGegetVigetSelectVegetViberGeitVegetViberGeitVegetViberGeitVegetViberGeitVegetSelectVegetVegetViberGeitVegetViberGeitVegetVigetSelectVitgeVigetSextViberGeiVegetSeightViewGeiVegetVegetSeightViewGeiVegetViewGeiVegetVigetSelect. .setViewMode (QtGui.QListView. .geometryType () == QGis.Polygon: self.layers.append (i.name ()) # Popolnite listWidget z vso plastjo mnogokotnika, ki je prisotna v TOC self.listWidget.addItems (self.layers) #put izbrane plasti na seznamu selectedLayers = self.listWidget.selectedItems ()

todalistWidget.selectedItems ()se zdi prazno. Če tiskamselectedLayersSamo dobim[].

Poskušal sem tudi zagnati zanko čezlistWidget:

#popultate seznam samo z izbranimi plastmi seznama za element v self.listWidget.selectedItems (): self.selectedLayers.append (item)

ampak tudi ne deluje, vedno in prazen seznam.


Zdi se mi, da želite izpolniti seznam, še preden ste sploh izbrali kateri koli element. Najprej ga napolnite in v naslednjem koraku že želite izbrane elemente.

Morali bi registrirati dogodek in določiti funkcijo, kaj storiti v tem trenutku. Na primer, ko pritisnete gumb ali izberete element, dobite izbrane sloje.

Nekaj ​​kot:

def get_selected_layers (self): selectedLayers = self.listWidget.selectedItems () # naredite preostalo kodo

Signale Qt za QListWidget najdete v dokumentih, dogodek pa je najlažje registrirati v pogledu Signali in reže Qt Designer (F4), kjer lahko signal povežete z določeno funkcijo.


To je lažje storiti s predmetom QgsMapLayerComboBox razred, ker se seznam slojev samodejno vključi iz zaznanega okolja. Filtre lahko nastavite iz QgsMapLayerProxyModel razred za nalaganje samo plasti mnogokotnikov. Tako enostavno je, da lahko s Python Console preizkusite pristop.

V mojem primeru sem v QGIS naložil tri vektorske plasti (dva poligona in enotočkovno plast); kot je mogoče opaziti na naslednji sliki:

Uporabil sem naslednjo kodo:

iz qgis.gui import * wcb = QgsMapLayerComboBox () wcb.setFilters (QgsMapLayerProxyModel.PolygonLayer) wcb.show ()

da dobite ta rezultat:

Opazite, da filter deluje, kot je bilo pričakovano. Na Combo Boxu so samo plasti poligonov.

V vtičniku je kombinirani okvir instanciran na __v__ metoda. Funkcija reže ali metoda zagona se uporablja za pridobitev sklica sloja z metodo 'currentLayer' v QgsMapLayerComboBox. Naslednja odrezana koda je povzetek postopka:

… Def __init __ (self, iface):… self.wcbL = QgsMapLayerComboBox (self.dlg) self.wcbL.move (150,28) self.wcbL.setMinimumWidth (203) self.wcbL.setFilters (QgsMapLayerProxyModLayerProxyModLayerProxyModLayerProxyModelerLoderModLayerProxyModelLayerProxyModelLayerProxyModel run (self): "" "Zaženi metodo, ki izvaja vsa resnična dela" "" vlayer = self.wcbL.currentLayer () ... # prikaži pogovorno okno self.dlg.show () ...

Poglej si posnetek: Антивандальное эмалевое покрытие входных дверей Burkovsky