Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Python
23-12-2010, 22:24,
#11
RE: Python
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
24-12-2010, 01:49,
#12
RE: Python
Smile To znaczy, że nazwa pliku zip nie zgadzała się z nazwą zawartego w nim katalogu - a ta nazwa jest identyfikatorem wtyczki.
26-12-2010, 23:20,
#13
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.)
#14
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,
#15
RE: Python
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.
28-12-2010, 20:54,
#16
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 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?
28-12-2010, 22:46,
#17
RE: Python
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.
28-12-2010, 23:33,
#18
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,
#19
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,
#20
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


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Python: selekcja elementów randyX 0 6 138 28-06-2016, 15:05
Ostatni post: randyX
  Kreator zapytań a Python Rayo 2 13 525 26-07-2012, 20:39
Ostatni post: Rayo
  Python - tabela atrybutów odwołanie Jarek_Re 6 31 365 30-05-2012, 11:51
Ostatni post: Rayo
  Python: valueMap damian 8 33 863 09-12-2011, 02:07
Ostatni post: borys
  Python - pytanie Rayo 2 13 652 29-08-2011, 18:56
Ostatni post: Rayo

Skocz do: