[Gfoss] gestione delle finestre di dialogo QgsAttributeForm tramite phyton

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