QGISインターフェイスを使用してフィーチャ属性を編集するために、レイヤーをカスタムUIに関連付けることができることを知っています。しかし、これはPythonで可能ですか?
このリンクは、結果を手動で取得する方法を示しています。しかし、レイヤーを自動的に作成し、UIファイルとメソッドを毎回再定義する必要なくカスタムUIを使用できるようにしたいと考えています。
QGISインターフェイスを使用してフィーチャ属性を編集するために、レイヤーをカスタムUIに関連付けることができることを知っています。しかし、これはPythonで可能ですか?
このリンクは、結果を手動で取得する方法を示しています。しかし、レイヤーを自動的に作成し、UIファイルとメソッドを毎回再定義する必要なくカスタムUIを使用できるようにしたいと考えています。
回答:
これを行うには、次の方法があります。
QgsVectorLayer.setEditForm( '/ path / to / your / ui / file') はUIファイルを提供し、 QgsVectorLayer.setEditFormInit( 'python.Function') はpython initメソッドを提供します
したがって、QgsVectorLayerを使用vl
すると、次のことが目的の機能を果たします
vl.setEditForm( '/home/me/uifile.ui' )
vl.setEditFormInit( 'RoadForm.formOpen' )
始まってQGIS 2.0あなたも持っています。
QgsVectorLayer.setEditorLayout(QgsVectorLayer :: EditorLayout)
提供QgsVectorLayer.GeneratedLayout
、QgsVectorLayer.TabLayout
またはQgsVectorLayer.UiFileLayout
種類レイアウトの欲しいものを指定します。これにより、新しいドラッグアンドドロップデザイナー(TabLayout)を指定できます。
更新: QGIS 2.4 以降、エディターウィジェットのタイプとその構成を変更するための新しいメソッド(QgsVectorLayer.setEditorWidgetV2およびsetEditorWidgetV2Config)があります。ここで説明する方法は引き続き機能しますが、非推奨としてマークされています。
使用する特定のウィジェットに関連するいくつかのメソッドがあります。
使用QgsVectorLayer.setEditType(fieldIdx、editType)あなたはフィールドインデックスfieldIdxのためのウィジェットで使用する編集の種類を指定します。editTypeはこれらの 1つです。
ウィジェットの動作をさらに構成するには、次の方法を使用します(もちろん、使用可能なウィジェット構成オプションによって異なります)。
setEditForm
、非推奨setEditFormInit
でsetEditorLayout
はありません。ウィジェット関連の方法(のみsetEditType
、valueMap
、widgetSize
を除くなど)setFieldEditable
とsetLabelOnTop
。