Mehr

Verbinden Sie sich mit der QGIS 2.6 Python Plugin-Funktion über die Schaltfläche im benutzerdefinierten Feature-Formular


Ich versuche, über eine benutzerdefinierte Feature-Formularschaltfläche eine Verbindung zu einer QGIS 2.6 Python-Plugin-Funktion herzustellen.

In meinem Feature-Formular versuche ich, einige Dinge zu tun:

  • den updateButton nur aktivieren, wenn die Checkbox (Reparee) markiert ist
  • Trennen Sie die Standardvalidierung und verbinden Sie sich erneut mit meiner Validierungsfunktion
  • Verbinden Sie sich mit einem Klick mit einer Funktion in einem Python-Plugin
from PyQt4.QtCore import * from PyQt4.QtGui import * from qgis import utils OriginInfofield = None Repareefield = None myDialog = None myFeature = None myLayer = None def formOpen(dialog,layer,feature,featureid): global myDialog, outilInstance myDialog = dialog global Repareefield, OriginInfofield myFeature = Feature myLayer = Layer OriginInfofield = dialog.findChild(QLineEdit,"OriginInfo") Repareefield = dialog.findChild(QCheckBox, "Reparee") buttonBox = dialog.findChild(QDialogButtonBox,"buttonBox") updateButton = dialog. findChild(QDialogButtonBox, "updateButton") # Trennen Sie das Signal, das QGIS für den Dialog mit der Schaltflächenbox verbunden hat. buttonBox.accepted.disconnect(myDialog.accept) # Verdrahten Sie unsere eigenen Signale. buttonBox.accepted.connect(validate) buttonBox.rejected.connect(myDialog.reject) updateButton.clicked.connect(update) if Repareefield.isChecked(): updateButton.setEnabled(False) if 'fuitesOutil' in utils.plugins: outilInstance = utils.plugins['fuitesOutil'] QMessageBox.information(None, 'Info', 'Got to open form') def update(featureid): global updateButton, Repareefield outilInstance.updateDeclaredTableWidget(featureid) QMessageBox.information(None, 'Info' , 'Got to function') def validiere(): global outilInstance globales OriginInfofield if not len(OriginInfofield.text()) > 0 or OriginInfofield.text() == 'NULL': OriginInfofield.setStyleSheet("background-color: rgba (255, 107, 107, 150);") QMessageBox.warning(None,'Probleme de saisie',"Veuillez remplir 'Origin d'Information'") else: # Das Formular als akzeptiert an QGIS zurückgeben. myDialog.accept()

Meine Plugin-Funktion sieht so aus (ein Teil davon - die Funktion funktioniert gut, wenn sie im Plugin selbst ausgelöst wird):

def updateDeclaredTableWidget(self, fid): QMessageBox.information(None, 'Info', 'Got to the plugin') self.decdlg.show() request = QgsFeatureRequest(fid)…

Die einzige QMessageBox, die ich erreiche, ist die in der Validierungsfunktion, aber die Bedingung funktioniert nicht und der Dialog wird trotzdem akzeptiert. Ich bin überrascht, dass das in formOpen nicht auftaucht. Meine Python-Datei befindet sich in OsGeo4W/apps/qgis/python. Zuvor habe ich es in .qgis2 belassen, aber die Struktur scheint jetzt anders zu sein, da ich es mit OsGeo4 installiert habe.

UNTEN AKTUALISIEREN:

Ich schaue mir die aktualisierte QgsAttributeForm-Klassenreferenz an und stelle fest, dass Akzeptieren und Ablehnen jetzt veraltet sind. Sofern ich keinen anderen Fehler übersehe, habe ich das Gefühl, dass ich den Akzeptieren-Button in meinem Feature-Formular schlecht trenne. Ich habe versucht, sie durch resetValues ​​und Save zu ersetzen, hatte aber immer noch keinen Erfolg.

  • Verwenden vonmyDialog.disconnectButtonBox()gibt mir einAttributeError: QgsAttributeForm-Objekt hat kein Attribut DisconnectButtonBox
  • Ich habe dann versucht, die Verbindung wie bisher zu trennen, jedoch mit der neuen Speicherfunktion. Das gibt mir einTypeError: Disconnect() zwischen 'accepted' und 'save' fehlgeschlagen.

Irgendwelche Hinweise zum ordnungsgemäßen Trennen der buttonBox und zum erneuten Verbinden mit meinen Funktionen?

Meine Versuche bisher:

def formOpen(dialog, layer, feature, featureid): myDialog = dialog #featureForm.disconnectButtonBox() buttonBox.accepted.disconnect(myDialog.save) buttonBox.accepted.connect(validate) buttonBox.rejected.connect(myDialog.resetValues) def Validate(): wenn nicht myConditions == True: doStuff sonst: myDialog.save()

Brise immer noch durch den Zustand.

Mein ultimatives Ziel ist es, einige Felder basierend auf den Feature-Attributen eines anderen sich überschneidenden Layers vorab auszufüllen.


Schau das Video: PostgreSQL Opret database QGIS 3 Opret DB connection (Oktober 2021).