PyQGISを使用してプログラムでレイヤーをカスタムUIに関連付けますか?


9

QGISインターフェイスを使用してフィーチャ属性を編集するために、レイヤーをカスタムUIに関連付けることができることを知っています。しかし、これはPythonで可能ですか?

このリンクは、結果を手動で取得する方法を示しています。しかし、レイヤーを自動的に作成し、UIファイルとメソッドを毎回再定義する必要なくカスタムUIを使用できるようにしたいと考えています。


1
@Matthiasありがとうございます!プラグイン開発者として、私はその機能に興味を持っていました。ただし、RoadForm.pyはプロジェクトのディレクトリに配置する必要があることに注意します。プラグインからinit関数を定義することは可能ですか?
NZファーマー

回答:


17

フォームのレイアウト

これを行うには、次の方法があります。

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.GeneratedLayoutQgsVectorLayer.TabLayoutまたはQgsVectorLayer.UiFileLayout種類レイアウトの欲しいものを指定します。これにより、新しいドラッグアンドドロップデザイナー(TabLayout)を指定できます。

ウィジェットのレイアウト

更新: QGIS 2.4 以降、エディターウィジェットのタイプとその構成を変更するための新しいメソッド(QgsVectorLayer.setEditorWidgetV2およびsetEditorWidgetV2Config)があります。ここで説明する方法は引き続き機能しますが、非推奨としてマークされています。

使用する特定のウィジェットに関連するいくつかのメソッドがあります。

使用QgsVectorLayer.setEditType(fieldIdx、editType)あなたはフィールドインデックスfieldIdxのためのウィジェットで使用する編集の種類を指定します。editTypeはこれらの 1つです。

ウィジェットの動作をさらに構成するには、次の方法を使用します(もちろん、使用可能なウィジェット構成オプションによって異なります)。


こんにちはマティアス、この非常に完全に見える答えをありがとう。確かにあなたは私の質問に答えたように見えます。少し時間をかけてメソッドを実行してください。賞金を授与します。
Dan

@Matthias Kuhn QGIS 2.0または2.2でcsvからvalueMap()に値のリストを追加することは可能ですか?また、新しくユーザーが追加した値でプログラムによってリストを更新することは可能ですか?
user25976 2014

@MatthiasあなたはQGis開発者の一人ですよね?この情報は非常に便利です。おそらくこれをQGisクックブック(docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook)に追加する必要があります。現在、私はこの質問を見つけるために多くのグーグル検索を行い、APIはあまり役に立ちませんでした(特にEditForm、EditorLayout、EditorWidgetV2の違いについて)。
Rauni 2014

@Matthias「ここで説明するメソッドは引き続き機能しますが、非推奨としてマークされています。」と言ったとき、メソッドsetEditorLayoutまたはメソッドsetEditForm + setEditFormInitを参照しましたか?
Rauni

@Rauniクックブックへのご意見ありがとうございます。setEditForm、非推奨setEditFormInitsetEditorLayoutはありません。ウィジェット関連の方法(のみsetEditTypevalueMapwidgetSizeを除くなど)setFieldEditablesetLabelOnTop
Matthias Kuhn 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.