シェープファイルの各ポリゴンのデータ入力をカスタマイズするには、QGIS でフォームを作成する必要があります。QtDesigner を使用してフォーム (.ui) を作成し、いくつかのテキスト ボックスとコンボ ボックスがシェープファイルのフィールドを指しています。
次に、Nathan QGIS ブログの python ファイルを使用してロジックを追加します。
Python コード:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
nameField = None
myDialog = None
def formOpen(dialog,layerid,featureid):
global myDialog
myDialog = dialog
global nameField
nameField = dialog.findChild(QTextEdit,"PART")
buttonBox = dialog.findChild(QDialogButtonBox,"buttonBox")
nameField.textChanged.connect(Name_onTextChanged)
# Disconnect the signal that QGIS has wired up for the dialog to the button box.
buttonBox.accepted.disconnect(myDialog.accept)
# Wire up our own signals.
buttonBox.accepted.connect(validate)
buttonBox.rejected.connect(myDialog.reject)
def validate():
# Make sure that the name field isn't empty.
if not nameField.text().length() > 0:
nameField.setStyleSheet("background-color: rgba(255, 107, 107, 150);")
msgBox = QMessageBox()
msgBox.setText("Field PART must not be NULL.")
msgBox.exec_()
else:
# Return the form as accpeted to QGIS.
myDialog.accept()
def Name_onTextChanged(text):
if not nameField.text().length() > 0:
nameField.setStyleSheet("background-color: rgba(255, 107, 107, 150);")
else:
nameField.setStyleSheet("")
QGIS で編集セッションを開き、識別ツールでポリゴンをクリックしますが、カスタマイズしたフォームの [OK] ボタンをクリックすると、フィールド PART が NULL であるかどうかに関係なく、次のエラーが発生します。
ERROR CODE LINE >>>> if not nameField.text().length() > 0:
ERROR MESSAGE >>>> AttributeError: 'str' object has no attribute 'text'
QGIS 1.7.4、Python 2.7.2、Windows 7 64 ビットを実行しています。
私は何かが恋しい...お願い、誰か私を助けることができますか?