23-12-2010, 22:24,
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Python
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..."
|
|
26-12-2010, 23:20,
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Python
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.
|
|
26-12-2010, 23:42,
(Ten post był ostatnio modyfikowany: 26-12-2010, 23:46 {2} przez borys.)
|
|
borys
Moderator
|
Liczba postów: 603
2
Dołączył: 27-08-2009
Reputacja:
2
|
|
RE: Python
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.
|
|
28-12-2010, 17:10,
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Python
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.
|
|
28-12-2010, 20:54,
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Python
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?
|
|
28-12-2010, 23:33,
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Python
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()?
|
|
28-12-2010, 23:54,
|
|
borys
Moderator
|
Liczba postów: 603
2
Dołączył: 27-08-2009
Reputacja:
2
|
|
RE: Python
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.
|
|
29-12-2010, 08:13,
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Python
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
|
|
|