Je sais qu'il est possible d'associer une couche à une interface utilisateur personnalisée pour modifier les attributs d'entité à l'aide de l'interface QGIS. Mais est-ce possible avec Python?
Ce lien montre comment obtenir le résultat manuellement . Mais je voudrais pouvoir créer des couches automatiquement et leur faire utiliser une interface utilisateur personnalisée sans avoir à redéfinir le fichier et la méthode de l'interface utilisateur à chaque fois.
Réponses:
Disposition du formulaire
Vous disposez des méthodes suivantes pour ce faire:
QgsVectorLayer.setEditForm ('/ path / to / your / ui / file') pour fournir un fichier d'interface utilisateur et QgsVectorLayer.setEditFormInit ('python.Function') pour fournir une méthode d'initialisation python
Donc, avoir un QgsVectorLayer
vl
ce qui suit fera ce que vous recherchezÀ partir de QGIS 2.0, vous aurez également:
QgsVectorLayer.setEditorLayout (QgsVectorLayer :: EditorLayout)
Fournir
QgsVectorLayer.GeneratedLayout
,QgsVectorLayer.TabLayout
ouQgsVectorLayer.UiFileLayout
de préciser quel type de mise en page que vous voulez. Cela vous permet de spécifier le nouveau concepteur de glisser-déposer (TabLayout).Disposition des widgets
Mise à jour: à partir de QGIS 2.4, il y aura de nouvelles méthodes ( QgsVectorLayer.setEditorWidgetV2 et setEditorWidgetV2Config ) pour changer un type de widget d'éditeur et sa configuration. La méthode décrite ici fonctionnera toujours mais est marquée comme obsolète.
Il existe un certain nombre de méthodes liées aux widgets spécifiques que vous souhaitez utiliser:
Utilisez QgsVectorLayer.setEditType (fieldIdx, editType) pour spécifier le type de modification que vous souhaitez utiliser pour le widget pour l'index de champ fieldIdx. EditType est l' un de ceux - ci .
Pour configurer davantage le comportement du widget, utilisez les méthodes suivantes (en fonction des options de configuration de widget disponibles bien sûr):
la source
setEditForm
,setEditFormInit
EtsetEditorLayout
ne sont pas dépréciée. Seules les méthodes liées widget (setEditType
,valueMap
,widgetSize
etc.) à l' exceptionsetFieldEditable
etsetLabelOnTop
.