sto effettuando il porting di VTerrain plugin alla versione 2.01 di QGis.
Ho aggiunto con successo il file Metadata.txt e il plugin è ora visibile ed eseguibile, ma al run viene ritornato il messaggio di errore:
File “.qgis2/python/plugins\VTerrain\VTerrain.py”, line 180, in run
if name.endsWith(“.bt”):
AttributeError: ‘unicode’ object has no attribute ‘endsWith’
probabilmente prima name era una QString ora e’ una semplice str di python => devi trovare la funzione equivalente in python per il controllo che vuoi eseguire (if name.endsWith(“.bt”)
purtroppo eliminare QString e soprattutto QStringList vuol dire spesso trovare le funzioni equivalenti in python con conseguenti cambi di logica => dover ritestare il plugin!
QString e str sono due classi differenti… alla lunga molto simili e non avrai difficolta’ a trovare l’equivalenti… stessa cosa per QStringLIst, a meno di non aver usato pesantemente i metodi che ti pemette QStrignList
In genre non e’ mai consigliabile legarsi mani e piedi ai tipi di dati di librerie esterne… specie quando queste sono librerie legate alla visualizzazione
python e’ gia’ potente di per se… le Qt le lascerei giusto quando serve interagire con Qt o con QGIS
sto effettuando il porting di VTerrain plugin alla versione 2.01 di QGis.
Ho aggiunto con successo il file Metadata.txt e il plugin è ora visibile ed eseguibile, ma al run viene ritornato il messaggio di errore:
File “.qgis2/python/plugins\VTerrain\VTerrain.py”, line 180, in run
if name.endsWith(“.bt”):
AttributeError: ‘unicode’ object has no attribute ‘endsWith’
Il giorno Tue, 24 Sep 2013 12:50:38 +0200
Geo DrinX <geodrinx@gmail.com> ha scritto:
......
Il codice sorgente è questo:
name = layer.source();
if name.endsWith(".bt"):
...eccetera
come comportarsi, in questo caso ? Mah.
provato: if '.bt' in name: ?
sarebbe meglio garantirsi che siano proprio gli ultimi caratteri; in
perl ci sono degli appositi operatori, in python purtroppo non so, ma
penso che una rapida ricerca in google possa risolvere
non capisco la domanda… name e’ una str di python… prima invece era una QString, perche’ era quel che restituisce layer.source(), ma con le SIP2.0 c’e’ una mappatura diretta tra QStriung e str (pero’ non sono la stessa classe e dunque non hanno gli stessi metodi)
che so, prova con una regexp (piu’ sicura) o come ha suggerito giuliano
probabilmente prima name era una QString ora e’ una semplice str di python => devi trovare la funzione equivalente in python per il controllo che vuoi eseguire (if name.endsWith(“.bt”)
if QGis.QGIS_VERSION_INT < 10900:
if name.endsWith(“.bt”):
fileTemp.write (’ <Surface_Type>0</Surface_Type>\n’ )
else:
if (name[-3:] == (“.bt”)):
fileTemp.write (’ <Surface_Type>0</Surface_Type>\n’ )
And… it works in both versions.
Now I had other problem: I have a new 1.0 version of VTerrain plugin and I want to upload it in the repository, but… my “edit” button is hidden…
Qualcuno puo’ aiutarmi (Someone can help me) ?
Roberto
···
Il giorno 24 settembre 2013 14:37, giulianc51 <giulianc51@gmail.com> ha scritto:
Il giorno Tue, 24 Sep 2013 12:50:38 +0200
Geo DrinX <geodrinx@gmail.com> ha scritto:
…
Il codice sorgente è questo:
name = layer.source();
if name.endsWith(“.bt”):
…eccetera
come comportarsi, in questo caso ? Mah.
provato: if ‘.bt’ in name: ?
sarebbe meglio garantirsi che siano proprio gli ultimi caratteri; in
perl ci sono degli appositi operatori, in python purtroppo non so, ma
penso che una rapida ricerca in google possa risolvere