[Gfoss] gestione delle finestre di dialogo QgsAttributeForm tramite phyton

alessandro.ciali a gmail.com alessandro.ciali a gmail.com
Mer 19 Ago 2015 17:46:39 CEST


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
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.gfoss.it/pipermail/gfoss/attachments/20150819/0cb4b496/attachment.html>


Maggiori informazioni sulla lista Gfoss