Formulaire#
Warning
Pensez à autoriser les macros dans les Propriétés de QGIS ➡ Général ➡ Fichiers du projet ➡ Activer les macros
On peut personnaliser un formulaire avec :
- un fichier QtDesigner, même si on recommande l'utilisation du mode Drag&Drop qui permet de créer des onglets et des catégories.
- un fichier Python afin de modifier le comportement du formulaire, ajouter des boutons, modifier la CSS etc
Tip
Le blog de Nathan est une bonne ressource concernant les formulaires et QtDesigner pour cette partie la, mais cela commence à être vieux.
Sur la couche Geopackage, dans les propriétés de la couche ➡ Formulaire d'attributs, cliquer sur le petit logo Python en haut bleu et jaune. Choisir l'option Fournir le code dans cette boîte de dialogue.
Dans le nom de la fonction, mettre my_form_open
qui correspond à l'exemple du code en dessous.
La fonction my_form_open
sera donc exécuté par défaut lors de l'ouverture du formulaire. On remarque qu'il
y a trois paramètres qui sont donnés :
dialog
➡ QgsAttributeForm qui hérite de QWidgetlayer
➡ QgsVectorLayerfeature
➡ QgsFeature
Dans l'objet dialog
:
- essayons de rechercher les boutons en bas OK et Annuler
- ajoutons le bouton Aide pour ouvrir une page internet d'aide
Pour information :
QWidget::findChild(NOM_CLASSE)
retourne un objet de la NOM_CLASSE spécifié dans le widget courant. Ce n'est pas une chaîne de caractère bien une classe qu'il faut donner.QWidget::findChild(NOM_CLASSE, "nom_objet")
, idem que ci-dessus, mais permet de filtrer avec le nom de l'objet, très utile sur les champs.- La barre des boutons est une
QDialogButtonBox
- Pour ouvrir une URL :
QDesktopServices
Afficher
1 2 3 4 5 6 7 8 9 10 11 12 |
|
- Appliquons une CSS sur le champ
type
pour mettre un fond rouge :
1 2 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
- Cherchons le champ
surface
et calculons la surface avec la géométrie.
Info
Notons que ce ne sont que des exemples des fonctionnalités Python. On peut faire ces masques de saisie à l'aide des expressions QGIS ou simplement en changeant le type de widget pour un champ en particulier.