<div dir="ltr">per esempio c'e'<div><br></div><div><a href="https://github.com/sourcepole/qgis-remote-debug">https://github.com/sourcepole/qgis-remote-debug</a><br></div><div><br></div><div>non lo trovi nel repo dei plugin e non saprei dire perche'... morale clonati il repo nella directory dei plugin e segui le istruzioni del readme</div>
<div><br></div><div>ciao Luigi Pirelli</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 23 June 2014 14:51, NicoPez <span dir="ltr"><<a href="mailto:nico.pezzotta@gmail.com" target="_blank">nico.pezzotta@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Buon pomeriggio a tutti. Mi sto cimentando per la prima volta con la<br>
creazione di plugin e finora sono riuscito sempre a risolvere i problemi<br>
"grazie" agli errori segnalati da QGIS al momento dell'avvio o quando vado a<br>
far girare il plugin. Ora invece non mi da nessun errore, ma non il plugin<br>
non elabora. Se vi incollo il codice, potreste aiutarmi e capire dove è il<br>
problema? Fino alla "def search()" sembrava andare tutto come doveva. P.S.:<br>
c'è un modo per fare il debug del codice fino ad un certo punto, oppure<br>
eseguire il codice passo passo (come in VBA)? Grazie in anticipo!<br>
<br>
from PyQt4 import QtCore, QtGui<br>
from qgis.core import *<br>
from PyQt4.QtCore import *<br>
from PyQt4.QtGui import *<br>
from qgis.core import *<br>
from qgis.gui import *<br>
<br>
from ui_searchparcels2 import Ui_SearchParcels2<br>
# create the dialog for zoom to point<br>
<br>
<br>
class SearchParcels2Dialog(QtGui.QDialog, Ui_SearchParcels2):<br>
def __init__(self):<br>
QtGui.QDialog.__init__(self)<br>
self.setupUi(self)<br>
<br>
QObject.connect(self.uptadeButton, SIGNAL("clicked()"),<br>
self.chooseLayer)<br>
QObject.connect(self.comboBox,<br>
SIGNAL("currentIndexChanged(QString)"), self.chooseField)<br>
QObject.connect(self.comboBox,<br>
SIGNAL("currentIndexChanged(QString)"), self.chooseField2)<br>
QObject.connect(self.selectBox, SIGNAL("stateChanged(int)"),<br>
self.OnSelectBoxClicked)<br>
QObject.connect(self.cancelButton, SIGNAL("clicked()"),<br>
self.cancelSearch)<br>
QObject.connect(self.goButton, SIGNAL("clicked()"), self.search)<br>
<br>
self.chooseLayer()<br>
<br>
# in first comboBox show the list of layers (list of names)<br>
def chooseLayer(self):<br>
layerList = [] # crea una lista vuota<br>
self.comboBox.clear() # svuota la lista del combo box<br>
layerList = self.getLayerNames() # a layerList assegna il<br>
risultato della procedura getLayerNames()<br>
self.comboBox.addItems(layerList)<br>
self.FoglioLine.clear()<br>
self.ParticelLine.clear()<br>
self.OnSelectBoxClicked()<br>
return<br>
<br>
# Get the list of layers (list of names) in QgsMapLayerRegistry<br>
def getLayerNames(self):<br>
layermap = QgsMapLayerRegistry.instance().mapLayers() # assegna a<br>
layermap l'insieme dei layers caricati<br>
layerLst = []<br>
for i, layer in layermap.iteritems():<br>
if layer.type() == QgsMapLayer.VectorLayer: # considera solo<br>
i layers vettoriali<br>
layerLst.append( unicode( <a href="http://layer.name" target="_blank">layer.name</a>() ) ) # prende il<br>
nome di ogni layer a lo aggiunge alla lista layerLst<br>
return layerLst<br>
<br>
# in second comboBox show the list fields (list of names)<br>
def chooseField(self):<br>
fieldList = []<br>
self.campo1.clear()<br>
fieldList = self.getFieldNames()<br>
self.campo1.addItems( fieldList )<br>
return<br>
<br>
# Get the list fields (list of names) for the selected layer<br>
def getFieldNames(self):<br>
layermap = QgsMapLayerRegistry.instance().mapLayers()<br>
fieldLst = []<br>
for i, layer in layermap.iteritems():<br>
if layer.type() == QgsMapLayer.VectorLayer and <a href="http://layer.name" target="_blank">layer.name</a>() ==<br>
self.comboBox.currentText():<br>
if layer.isValid():<br>
fields = layer.dataProvider().fields()<br>
for i in range(fields.count()):<br>
field = fields[i]<br>
fieldLst.append(<a href="http://field.name" target="_blank">field.name</a>())<br>
return fieldLst<br>
<br>
# in third comboBox show the list fields (list of names)<br>
def chooseField2(self):<br>
fieldList = []<br>
self.campo2.clear()<br>
fieldList = self.getFieldNames()<br>
self.campo2.addItems( fieldList )<br>
return<br>
<br>
def OnSelectBoxClicked(self):<br>
layermap = QgsMapLayerRegistry.instance().mapLayers()<br>
for i, layer in layermap.iteritems():<br>
if layer.type() == QgsMapLayer.VectorLayer and <a href="http://layer.name" target="_blank">layer.name</a>() ==<br>
self.comboBox.currentText():<br>
if layer.isValid():<br>
if not self.selectBox.isChecked():<br>
self.panBox.setEnabled(False)<br>
self.scaleBox.setEnabled(False)<br>
else:<br>
self.panBox.setEnabled(layer.hasGeometryType())<br>
self.scaleBox.setEnabled(layer.hasGeometryType())<br>
return<br>
<br>
def cancelSearch(self):<br>
self.continueSearch = False<br>
return<br>
<br>
def search(self):<br>
i = self.comboBox.currentIndex()<br>
if i < 0:<br>
return None<br>
layerId = self.comboBox.itemData(i)<br>
layer = QgsMapLayerRegistry.instance().mapLayer(layerId)<br>
if layer is None:<br>
return<br>
toFind = self.FoglioLine.text()<br>
toFind2 = self.ParticelLine.text()<br>
f = QgsFeature()<br>
results = []<br>
fieldIndex = self.campo1.currentIndex()<br>
fieldName = self.campo1.itemData(fieldIndex)<br>
fieldIndex2 = self.campo2.currentIndex()<br>
fieldName2 = self.campo2.itemData(fieldIndex2)<br>
if fieldName == "" or fieldName2 == "":<br>
QMessageBox<br>
msgBox.setText("Search Parcels 2: Seleziona un campo.")<br>
msgBox.exec_()<br>
return<br>
try:<br>
float(toFind)<br>
except ValueError:<br>
QMessageBox<br>
msgBox.setText("Search Parcels 2: Inserisci un valore<br>
numerico.")<br>
msgBox.exec_()<br>
return<br>
try:<br>
float(toFind2)<br>
except ValueError:<br>
QMessageBox<br>
msgBox.setText("Search Parcels 2: Inserisci un valore<br>
numerico.")<br>
msgBox.exec_()<br>
return<br>
show progress bar<br>
self.progressBar.setMinimum(0)<br>
self.progressBar.setMaximum(layer.featureCount())<br>
self.progressBar.setValue(0)<br>
self.widget_2.show()<br>
# disable rest of UI<br>
self.layerWidgetGroup.setEnabled(False)<br>
self.SearchWidgetGroup.setEnabled(False)<br>
self.CheckWidgetGroup.setEnabled(False)<br>
# create feature request<br>
featReq = QgsFeatureRequest()<br>
featReq.setFlags(QgsFeatureRequest.NoGeometry)<br>
Req = featReq.setSubsetOfAttributes([fieldIndex])<br>
Re2 = featReq.setSubsetOfAttributes([fieldIndex2])<br>
iter = layer.getFeatures(featReq)<br>
# process<br>
k = 0<br>
n = 0<br>
self.continueSearch = True<br>
while iter.nextFeature(f) and self.continueSearch:<br>
k += 1<br>
if self.evaluate(f[fieldName], toFind):<br>
results.append(<a href="http://f.id" target="_blank">f.id</a>())<br>
f2 = QgisFeature(<a href="http://f.id" target="_blank">f.id</a>())<br>
while iter.nextFeature(f2) and self.continueSearh:<br>
n += 1<br>
if self.evaluate(f[fieldName2], toFind2):<br>
results2.append(<a href="http://f2.id" target="_blank">f2.id</a>())<br>
self.progressBar.setValue(n)<br>
QCoreApplication.processEvents()<br>
# reset UI<br>
self.widget_2.hide()<br>
self.layerWidgetGroup.setEnabled(True)<br>
self.SearchWidgetGroup.setEnabled(True)<br>
self.CheckWidgetGroup.setEnabled(True)<br>
# process results<br>
if self.continueSearch:<br>
QMessageBox<br>
msgBox.setText("Search Parcels 2: %u particelle trovate.")<br>
msgBox.exec_()<br>
self.processResults(results2)<br>
return<br>
<br>
def evaluate(self, v1, v2):<br>
return float(v1) == float(v2)<br>
<br>
def processResults(self, results2):<br>
if layer is None:<br>
return<br>
if self.selectBox.isChecked():<br>
layer.setSelectedFeatures(results2)<br>
if len(results2) == 0:<br>
return<br>
<br>
if self.panBox.isEnabled() and self.panBox.isChecked():<br>
canvas = self.iface.mapCanvas()<br>
rect = canvas.mapRenderer().layerExtentToOutputExtent(layer,<br>
layer.boundingBoxOfSelected())<br>
if rect is not None:<br>
if self.scaleBox.isEnabled() and<br>
self.scaleBox.isChecked():<br>
rect.scale(1.5)<br>
canvas.setExtent(rect)<br>
else:<br>
canvas.setExtent(QgsRectangle(rect.center(),<br>
rect.center()))<br>
canvas.refresh()<br>
if self.formBox.isChecked():<br>
f = QgsFeature()<br>
for id in results2:<br>
if<br>
layer.getFeatures(QgsFeatureRequest().setFilterFid(id)).nextFeature(f):<br>
self.IdentifyResult(layer, f)<br>
return<br>
<br>
<br>
<br>
<br>
--<br>
View this message in context: <a href="http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/Creazione-plugin-problema-tp7588499.html" target="_blank">http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/Creazione-plugin-problema-tp7588499.html</a><br>
Sent from the Gfoss -- Geographic Free and Open Source Software - Italian mailing list mailing list archive at Nabble.com.<br>
_______________________________________________<br>
<a href="mailto:Gfoss@lists.gfoss.it">Gfoss@lists.gfoss.it</a><br>
<a href="http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss" target="_blank">http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss</a><br>
Questa e' una lista di discussione pubblica aperta a tutti.<br>
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.<br>
666+40 iscritti al 5.6.2014</blockquote></div><br></div>