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 - Rayo - 23-12-2010 Dzięki, działa. Ale komunikat w przypadku popełnienia błędu jest rewelacyjny "Wtyczka zniknęła. Wszystko wskazuje, że zainstalowałem wtyczkę, ale nie wiem gdzie..." RE: Python - borys - 24-12-2010 To znaczy, że nazwa pliku zip nie zgadzała się z nazwą zawartego w nim katalogu - a ta nazwa jest identyfikatorem wtyczki. RE: Python - Rayo - 26-12-2010 Czy w kodzie wtyczek QGISa nie można używać polskich znaków? U mnie zawsze pojawia się błąd gdy ich użyję. Nawet jeśli są to tylko komunikaty do wyświetlenia przez wtyczkę w otwieranym oknie. RE: Python - borys - 26-12-2010 To jest związane nie z Quantum, tylko z faktem, że Python 2.x pracuje domyślnie w kodowaniu iso latin-1. Jeśli w treści pliku .py gdziekolwiek chcesz użyć polskiego znaku, to pierwsza linijka (ewentualnie druga, jeśli pierwsza zawiera ścieżkę do interpretera) musi zawierać deklarację kodowania, np: # -*- coding: utf-8 -*- To załatwia problem literek w treści pliku .py. Natomiast co do wartości zmiennych, to do polskich liter nie możesz używać zmiennej typu string, lecz unicode (lub QString, które obsługuje znaki unikodowe). Pogooglaj problem unikodu w Pythonie. RE: Python - Rayo - 28-12-2010 Jak zwykle po Twojej radzie działa Tym razem mam problem z odczytaniem informacji, czy dana warstwa jest widoczna, czy nie. Korzystam z funkcji QgsMapCanvasLayer(warstwa).isVisible() ale dla wszystkich warstw dostaję wartość True, podczas gdy część jest wyłączona. RE: Python - Rayo - 28-12-2010 Udało mi się problem rozwiązać w następujący sposób self.iface.legendInterface().isLayerVisible(warstwa) Działa, ale do końca nie wiem jak Będę wdzięczny, jak mnie ktoś oświeci. Z dokumentacji QGisa wynika, że składnia powinna być następująca QgsLegendInterface.isLayerVisible(warstwa) Ale tak zapisane u mnie nie działa. Dlaczego? RE: Python - borys - 28-12-2010 Bo metoda legendInterface() zwraca konkretny obiekt klasy QgsLegendInterface, należący do jej obiektu, czyli w tym wypadku do self.iface - bieżącej instancji interfejsu Qgisa. Natomiast pisząc QgsLegendInterface próbujesz skonstruować nowy obiekt klasy QgsLegendInterface, zamiast odwołać się do tego istniejącego. RE: Python - Rayo - 28-12-2010 Trochę podrążę jeszcze ten temat, choć być może pytam o zupełne podstawy... W dokumentacji API QGisa opisane są klasy, np QgsLegendInterface. Gdzie znajdę opisy metod, np legendInterface()? RE: Python - borys - 28-12-2010 Właśnie tam. Szukasz metody legendInterface() zmiennej iface, która jest obiektem typu QgisInterface (żeby to sprawdzić, wpisz w qgisowej konsoli qgis.utils.iface), więc to w niej musisz szukać: http://doc.qgis.org/head/classQgisInterface.html Na marginesie, dokumentacja jest do wersji stabilnej (1.0) oraz rozwojowej: http://doc.qgis.org/ Akurat tej metody nie znajdziesz w wersji stabilnej, co oznacza, że jeśli jej użyjesz, Twoja wtyczka nie będzie kompatybilna z Qgisem 1.0. Dostęp z Pythona do legendy wprowadziliśmy dopiero w 1.4. RE: Python - Rayo - 29-12-2010 Czy qgis.utils.iface to zmienna systemowa umożliwiająca dostęp do interface'u QGISa? Wpisując to w konsoli otrzymuję <qgis.gui.QgisInterface object at 0x05A2E810> Ale użycie w skrypcie powoduje błąd NameError: global name 'qgis' is not defined |