Salve, sto cercando di creare una init function in phyton da collegare ad una finestra di attributi (QgsAttributeForm) in qgis per inserire alcune funzioni di controllo sull’inserimento di valori; ho utilizzato il form di Nathan che è riportato anche nell’help di qgis per la customizzazione delle finestre di dialogo. La domanda è questa: quando la procedura di validazione fallisce vorrei che il form degli attributi rimanesse aperto per correggere i valori non validi, invece si chiude e si crea comunque un record in tabella. Sotto la parte di form che valida l’inserimento dati:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
myDialog = None
pkey_spuF = None
def formOpen(dialog,layerid,featureid):
global myDialog
myDialog = dialog
global pkey_spuF, quotaF, mod_cF, desc_cF
pkey_spuF = dialog.findChild(QLineEdit,“pkey_spu”)
quotaF = dialog.findChild(QLineEdit,“quota_slm”)
mod_cF = dialog.findChild(QComboBox,“mod_identcoord”)
desc_cF = dialog.findChild(QLineEdit,“desc_modcoord”)
buttonBox = dialog.findChild(QDialogButtonBox,“buttonBox”)
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 pkey_spu isn’t empty.
if not len(pkey_spuF.text()) > 0 or pkey_spuF.text() == ‘NULL’:
pkey_spuF.setStyleSheet(“background-color: rgba(255, 107, 107, 150);”)
msgBox = QMessageBox()
msgBox.setText(“il campo chiave primaria deve essere valorizzato”)
msgBox.exec_()
myDialog.resetValues()
else:
Make sure that the quota_slm isn’t empty.
if not len(quotaF.text()) > 0 or quotaF.text() == ‘NULL’:
quotaF.setStyleSheet(“background-color: rgba(255, 107, 107, 150);”)
msgBox = QMessageBox()
msgBox.setText(“il campo Quota slm deve essere valorizzato”)
msgBox.exec_()
myDialog.reject
else:
Return the form as accpeted to QGIS.
myDialog.accept()
Il problema, credo, sta nel fatto che la riga “ myDialog.reject “ o “myDialog.resetValues()” (ho provato sia l’una che l’altra); qualcuno sa aiutarmi?
Grazie in anticipo
Alessandro Ciali