Viac

Pripojte sa k funkcii doplnku QGIS 2.6 Python pomocou tlačidla na formulári vlastných funkcií


Pokúšam sa pripojiť k funkcii doplnku QGIS 2.6 Python pomocou tlačidla formulára vlastných funkcií.

Na svojom formulári funkcií sa pokúšam urobiť niekoľko vecí:

  • tlačidlo updateButton povoľte iba vtedy, ak je začiarknuté políčko (Reparee)
  • odpojte predvolené overenie a znova sa pripojte k mojej funkcii overenia
  • kliknutím na tlačidlo sa pripojíte k funkcii v doplnku python
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 globálne Repareefield, OriginInfofield myFeature = feature myLayer = vrstva OriginInfofield = dialog.findChild (QLineEdit, "OriginInfo") Repareefield = dialog.findChild (QCheckBox, "Reparee") buttonBox = dialog.findChild (QDialogButtonBox, "updateBox" findChild (QDialogButtonBox, "updateButton") # Odpojte signál, že sa QGIS zapojil pre dialóg do poľa s tlačidlami. buttonBox.accepted.disconnect (myDialog.accept) # Pripojte naše vlastné signály. 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 validate (): global outilInstance global 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: # Vráťte formulár prijatý do QGIS. myDialog.accept ()

Moja funkcia doplnku vyzerá takto (jeho časť - táto funkcia funguje správne, keď sa spustí v samotnom doplnku):

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

Jediný QMessageBox, na ktorý sa dostanem, je ten vo funkcii validácie, ale podmienka nefunguje a dialógové okno je prijaté. Som prekvapený, že ten vo formeOtvorený nevyskočí. Môj súbor python je v OsGeo4W/apps/qgis/python. Predtým som to uchovával v .qgis2, ale štruktúra sa teraz líši, keď som nainštaloval pomocou OsGeo4.

AKTUALIZÁCIA NÍŽE:

Pozerám sa na aktualizovaný odkaz na triedu QgsAttributeForm a všimol som si, že prijatie a odmietnutie je už zastarané. Pokiaľ neprehliadam inú chybu, mám pocit, že som asi zle odpojil tlačidlo prijatia vo svojom formulári funkcií. Skúsil som ich nahradiť resetValues ​​a Save, ale stále bez úspechu.

  • PoužitímmyDialog.disconnectButtonBox ()dáva miAttributeError: Objekt QgsAttributeForm nemá žiadny atribút disconnectButtonBox
  • Potom som sa pokúsil odpojiť tak, ako som to robil, ale s novou funkciou uloženia. To mi dáva aChyba TypeError: odpojenie () zlyhalo medzi „prijatými“ a „uloženými“.

Nejaké rady o správnom odpojení buttonBoxu a opätovnom pripojení k mojim funkciám?

Moje doterajšie pokusy:

def formOpen (dialóg, vrstva, funkcia, featureid): myDialog = dialóg #featureForm.disconnectButtonBox () buttonBox.accepted.disconnect (myDialog.save) buttonBox.accepted.connect (validate) buttonBox.rejected.connect (myDialog.resetValues) def validate (): if not myConditions == True: doStuff else: myDialog.save ()

Stále prievan pod podmienkou.

Mojím konečným cieľom je predbežne vyplniť niektoré polia na základe atribútov funkcií inej pretínajúcej sa vrstvy.


Pozri si video: QGIS Python Getting ready to use the QGIS Python API Version (Septembra 2021).