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 !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Mon 08 April 2019 15:10

jlavaure
Participant assidu
Date d'inscription: 20 Apr 2013
Messages: 201

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
Participant assidu
Date d'inscription: 20 Apr 2013
Messages: 201

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
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
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
Participant assidu
Date d'inscription: 20 Apr 2013
Messages: 201

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

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 722

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

 

#6 Fri 20 August 2021 14:03

jlavaure
Participant assidu
Date d'inscription: 20 Apr 2013
Messages: 201

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

Bonjour à tous,

Je me permet de remonter mon topic car j'essaie de mettre en place une fonctionnalité qui parait simple, mais ça fait bien longtemps que je n'ai pas fait de python.

Lorsque je lance mon plugin, je souhaiterais que ce soit la couche que j'ai sélectionné dans QGIS qui apparaisse dans ma ComboBox.
Par exemple :

Un projet QGIS avec 3 couches :
A
B
C

Je sélectionne la couche B, je lance mon plugin, il m'affiche dans ma CombBox la couche B. Si jamais c'était une erreur, j'ai toujours la liste complète des couches pour changer.

Une idée du "slot" à utiliser ?

Merci !

Hors ligne

 

Pied de page des forums

Powered by FluxBB