Forum QGIS

Pełna wersja: Python
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3
Dzięki, działa.
Ale komunikat w przypadku popełnienia błędu jest rewelacyjny Smile
"Wtyczka zniknęła.
Wszystko wskazuje, że zainstalowałem wtyczkę, ale nie wiem gdzie..." Smile Smile
Smile To znaczy, że nazwa pliku zip nie zgadzała się z nazwą zawartego w nim katalogu - a ta nazwa jest identyfikatorem wtyczki.
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.
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.
Jak zwykle po Twojej radzie działa Smile

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.
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 Wink
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?
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.
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()?
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.
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
Stron: 1 2 3