Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Si vous lisez ce message, cela signifie que vous êtes sur le nouveau serveur de GeoRezo.

Toutefois, suite à la migration, des anomalies voire des régressions existent et seront corrigées progressivement.

Merci de votre patience.

#1 Mon 08 April 2019 15:10

jlavaure
Membre
Date d'inscription: 20 Apr 2013
Messages: 139

QGIS/Python: Ajouter les Layers dans une combobox

Bonjour à tous,

Alors voilà, j'ai deux semaines d'expérience en développement PyQGIS, j'ai réussi à développer deux petits plugin mais une fonctionnalité me gène :
Je n'arrive pas à charger les couches de mon projet dans la combobox de mon plugin .... Du moins si mais que dans l'init.

Du coup si j'ajoute une couche dans un projet existant ou j'ai déjà lancé mon plugin elle n’apparaît pas dans la combobox.

Voici mon code qui me permet de récupérer mes couches pour le moment :

Code:

def __init__(self, parent=None):
        """Constructor."""
        super(WtgConsultationDialog, self).__init__(parent)
        
        self.setupUi(self)


        items=[layer.name() for id, layer in QgsProject.instance().mapLayers().items()]
        self.combo.addItems(items)
        self.button_box.accepted.connect(self.ok)

Comment faire pour toujours avoir toutes les couches quand je vais dans ma combobox ?
Petit bonus, comment lui spécifier de charger uniquement les points par exemple ?

Merci d'avance pour votre aide.
J.

Hors ligne

 

#2 Thu 11 April 2019 09:06

jlavaure
Membre
Date d'inscription: 20 Apr 2013
Messages: 139

Re: QGIS/Python: Ajouter les Layers dans une combobox

Du coup une solution a explorer ?

Hors ligne

 

#3 Fri 12 April 2019 17:10

MathieuR
Moderateur
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1585
Site web

Re: QGIS/Python: Ajouter les Layers dans une combobox

Bonjour,

Pour que la liste s'alimente d'elle-même, vous pourriez rajouter un bouton "update" qui aurait pour action de réinitialiser la liste au clic
ou bien mettre un signal lors de l'ajout de la couche

Ici, une fonction toto se déclenche quand on ajoute une couche / supprimer / change l'ordre des couches :

Code:

QgsProject.instance().layerTreeRoot().layerOrderChanged.connect(toto)

Pour filtrer les couches de type point :

Code:

items=[layer.name() for id, layer in QgsProject.instance().mapLayers().items() if layer.wkbType()==QGis.WKBPoint]

Geodata au Cerema et petits billets en géomatique

Hors ligne

 

#4 Tue 16 April 2019 12:00

jlavaure
Membre
Date d'inscription: 20 Apr 2013
Messages: 139

Re: QGIS/Python: Ajouter les Layers dans une combobox

@MathieuR :

Je te remercie pour ces éléments de réponses.
J'ai crée deux signaux (layersAdded et layersRemoved) qui déclenche une fonction qui ajoute mes couches dans la combobox.

Code:

def add_layers(self):
        self.combo.clear()
        items=[layer.name() for id, layer in QgsProject.instance().mapLayers().items()]
        self.combo.addItems(items)

Tout fonctionne niquel !

Merci.

J.

Hors ligne

 

#5 Thu 25 April 2019 18:07

lejedi76
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 307

Re: QGIS/Python: Ajouter les Layers dans une combobox

Bonjour,

juste pour information il y a déjà une classe qui s'occupe de cela :

https://qgis.org/api/classQgsMapLayerComboBox.html

Disponible aussi en version 2

Code:

from qgis.gui import QgsMapLayerComboBox, QgsMapLayerProxyModel
cb = QgsMapLayerComboBox()
# cb.setFilters(QgsMapLayerProxyModel.VectorLayer) pour ne garder que les couches vecteur
cb.show()

Le widget s'actualise automatiquement lorsque les couches s'actualisent, c'est l'avantage.

Bon courage

Dernière modification par lejedi76 (Thu 25 April 2019 18:08)

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |