Bonjour,
Je dispose d'un Shape avec ses attributs à partir desquels je souhaite créer une liste combinée avec trois champs (cette liste alimentera une Combobox dans un formulaire Qt). Donc je suis parti là dessus :
Code:
Liste = []
for elem in sortie.getFeatures():
Ligne = elem['si'] + " | " + elem['uu'] + " | " + elem['nom_poche']
Liste.append(Ligne)
Mais ma liste n'est pas triée :
Code:
for l in Liste:
print(l)
>>>
ZRD-003 | AVIGNON | CAVALLION
ZRD-004 | AVIGNON | CHATEAURENARD
ZRD-043 | RENNES | RENNES NORD
ZRD-043 | RENNES | RENNES NORD
SI654321 | STRASBOURG | Schulmeister
SI123456 | C1 | LaDefense_2
SI123456 | C1 | LaDefense_1
J'aimerais pouvoir faire un double trie sur 'nom_poche' et 'uu', de préférence sur les Features de ma couche en amont plutôt que sur la liste retournée pour cet exercice.
Je crois tenir une piste avec QgsFeatureRequest et OrderBy, OrderByClause, ou addOrderBy mais je ne comprends pas leur fonctionnement (en dépit de mes lectures sur l'API, le Cookbook, GIS Exchange ou autre).
Pour commencer si je fais cela :
Code:
for elem in sortie.getFeatures(QgsFeatureRequest().OrderByClause('si',True)):
coucou = elem['si']
Traceback (most recent call last):
File "C:\PROGRA~2\QGIS3~1.2\apps\Python36\lib\code.py", line 91, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
TypeError: QgsVectorLayer.getFeatures(): arguments did not match any overloaded call:
overload 1: argument 1 has unexpected type 'OrderByClause'
overload 2: argument 1 has unexpected type 'OrderByClause'
overload 3: argument 1 has unexpected type 'OrderByClause'
overload 4: argument 1 has unexpected type 'OrderByClause'
Je ne comprends pas pourquoi mais j'y arrive avec 'addOrderBy' sur un seul champ :
Code:
for elem in sortie.getFeatures(QgsFeatureRequest().addOrderBy('si',True)):
Mais lĂ je ne vois pas du tout comment combiner plusieurs addOrderBy, ou comment l'utiliser avec OrderByClause
Pourtant l'API déclare clairement cette possibilité (
ici) :
"The
OrderByClause class represents an order by clause for a
QgsFeatureRequest.It can be a simple field or an expression. Multiple order by clauses can be added to a
QgsFeatureRequest to fine tune the behavior if a single field or expression is not enough to completely specify the required behavior."
QgsFeatureRequest est-il le meilleur moyen d'arriver à mes fins? (il existe un moyen le faire en python pure, j'aimerais le faire via la bibliothèque QGis mais si c'est aberrant je prendrais note)
Une âme charitable pourrait-elle me venir en aide svp ? :goodidea: