Eu sei que é possível associar uma camada a uma interface do usuário personalizada para editar atributos de recurso usando a interface QGIS. Mas isso é possível com o Python?
Este link mostra como alcançar o resultado manualmente . Mas eu gostaria de poder criar camadas automaticamente e fazer com que elas usem a interface do usuário personalizada sem precisar redefinir o arquivo e o método da interface do usuário a cada vez.
Respostas:
Layout do formulário
Você tem os seguintes métodos para fazer isso:
QgsVectorLayer.setEditForm ('/ path / to / your / ui / file') para fornecer um arquivo de interface do usuário e QgsVectorLayer.setEditFormInit ('python.Function') para fornecer um método de inicialização python
Portanto, com um QgsVectorLayer,
vl
o seguinte fará o que você está procurandoA partir do QGIS 2.0, você também terá:
QgsVectorLayer.setEditorLayout (QgsVectorLayer :: EditorLayout)
Fornecer
QgsVectorLayer.GeneratedLayout
,QgsVectorLayer.TabLayout
ouQgsVectorLayer.UiFileLayout
para especificar que tipo de layout que você deseja. Isso permite especificar o novo designer de arrastar e soltar (TabLayout).Layout do widget
Atualização: a partir do QGIS 2.4, haverá novos métodos ( QgsVectorLayer.setEditorWidgetV2 e setEditorWidgetV2Config ) para alterar o tipo de widget do editor e sua configuração. O método descrito aqui ainda funcionará, mas está marcado como obsoleto.
Existem vários métodos relacionados aos widgets específicos que você deseja usar:
Use QgsVectorLayer.setEditType (fieldIdx, editType) para especificar o tipo de edição que você deseja usar para o widget do índice de campo fieldIdx. editType é um deles .
Para configurar ainda mais o comportamento do widget, use os seguintes métodos (dependendo das opções de configuração disponíveis, é claro):
fonte
setEditForm
,setEditFormInit
EsetEditorLayout
não estão obsoletos. Apenas os métodos Widget relacionados (setEditType
,valueMap
,widgetSize
etc.), excetosetFieldEditable
esetLabelOnTop
.