Python - Wersja do druku +- Forum QGIS (http://forum.quantum-gis.pl) +-- Dział: Desktop GIS (http://forum.quantum-gis.pl/forum-4.html) +--- Dział: QGIS (http://forum.quantum-gis.pl/forum-5.html) +--- Wątek: Python (/thread-332.html) |
RE: Python - borys - 29-12-2010 Systemowa jak systemowa. Jest to zmienna iface modułu qgis.utils: http://trac.osgeo.org/qgis/browser/trunk/qgis/python/utils.py którego nie zaimportowałeś, jak głosi komunikat. Ale dla wtyczki i tak się tak nie da, zamiast tego wskaźnik do interfejsu jest przekazywany przez QGISa do jej pseudo-konstruktora, czyli metody MojaWtyczka.__init__(iface) . Zazwyczaj wtyczki zaczynamy tak: class MojaWtyczka(): def __init__(self, iface): self.iface = iface Ponieważ iface jest tu zmienną lokalną i działa tylko wewnątrz metody __init__, to od razu go podstawiamy pod self.iface, czyli pole iface klasy MojaWtyczka. Później, wewnątrz obiektu wtyczki masz do niej dostęp przez self.iface (a z zewnątrz oczywiście przez mojawtyczka.iface ). RE: Python - Rayo - 29-12-2010 Wtyczkę mam napisaną w ten sposób, że główny program odwołuje się do modułu, w którym mam definicje poszczególnych funkcji. W tej chwili informację o iface podaję jako zmienne dla poszczególnych funkcji w module. Można to jakoś uprościć, żeby zmienna ta była widziana bezpośrednio w module? MojaWtyczka.iface nie bardzo mi odpowiada, bo jeśli będę chciał zastosować ten sam moduł w innej wtyczce, to będę musiał zmieniać na MojaWtyczka2.iface. RE: Python - borys - 29-12-2010 A spróbuj w tym module utworzyć zmienną iface, zaimportować ją i i podstawić w konstruktorze wtyczki: Kod: from mojmoduł import iface Może podziała, albo jak nie to jakoś tą drogą RE: Python - Rayo - 02-01-2011 Jak można odczytać sygnał emitowany przez daną klasę? Np stawiam nowy obiekt poprzez QgsVectorLayer.addFeature() i chciałbym odczytać ID dodanego obiektu. W dokumentacji jest sygnał featureAdded, ale nie wiem jak go odczytać. RE: Python - borys - 02-01-2011 Musisz go gdzieś podłączyć: QObject.connect(nadajnik, SIGNAL("sygnał (parametry)"), slot) Teoria -> googlaj pod hasłami PyQt signals slots Praktyka -> przeszukaj zainstalowane wtyczki pod hasłem connect RE: Python - Rayo - 22-02-2011 W jaki sposób wyszukać na warstwie obiekty o danych atrybutach? Ja robię to tak, że w pętli sprawdzam dany atrybut kolejno każdego obiektu i porównuję z zadanym warunkiem. Jest to jednak wolne przy dużej ilości obiektów, a poza tym nie chce mi się wierzyć, że nie ma na to gotowego sposobu. Zastanawiałem się nad warstwa.select(), ale nie wiem jak podać warunki. RE: Python - Rayo - 22-02-2011 Jeszcze jedno pytanie. Jaka jest różnica między klasami QgsVectorDataProvider a QgsVectorLayer? Część metod jest identyczna dla nich obu: wyszukiwanie obiektów, zliczanie itd. Której klasy należy używać dla wtyczek wyszukujących obiekty po atrybutach, obiekty przecinające się itp.? RE: Python - Rayo - 28-02-2011 Jeśli chodzi o wolne wyszukiwanie obiektów w pętli to problem rozwiązany - QGIS strasznie zwalnia nie przy wyszukiwaniu, a przy zaznaczeniu dużej ilości obiektów na warstwie (i tego należy unikać). Dzieje się tak nie tylko przy zaznaczaniu poprzez Pythona, ale "ręcznie" również. Otwarcie tabeli atrybutów z paroma tysiącami obiektów trwa strasznie długo. Ta sama tabela bez zaznaczonych obiektów otwiera się bezproblemowo. RE: Python - Rayo - 04-05-2011 Jak w Pythonie można obliczyć obwód poligonu? Długość i powierzchnię obiektu można wyliczyć za pomocą metod length() i area() klasy QgsGeometry, ale do liczenia obwodu nic nie mogę znaleźć.. Zrobiłem mały eksperyment i wyliczyłem długość dla poligonu (metoda length()). W wyniku otrzymałem obwód Działa też dla obiektów złożonych i "dziurawych". |