Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Python: valueMap
16-12-2010, 16:16,
#1
Python: valueMap
Witam szanownych forumowiczów, to mój pierwszy post Smile

Chciałbym zrobić wtyczkę, która uzupełni wartości słownika dla danego atrybutu, wartości istniejące można odczytać, niestety próba jakiejkolwiek zmiany kończy się niepowodzeniem:

layer = qgis.utils.iface.activeLayer()

>>> type(layer.valueMap(7))
<type 'dict'>
>>> layer.valueMap(7)
{PyQt4.QtCore.QString(u'des1'): <PyQt4.QtCore.QVariant object at 0x0C038378>}
>>> layer.valueMap(7).clear()
>>> layer.valueMap(7)
{PyQt4.QtCore.QString(u'des1'): <PyQt4.QtCore.QVariant object at 0x0C0384C8>}


Czy jest jakaś możliwość zmiany wartości słownikowych z poziomu pythona?

Pozdrawiam,
Damian
16-12-2010, 18:02,
#2
RE: Python: valueMap
Pierwszy post i już wtyczki chce pisać kolega, brawo Smile Też bym tak chciał Smile Na forum Borys wydaje się być wszechmogącym w tym temacie.
16-12-2010, 19:06,
#3
RE: Python: valueMap
Nie da się zmienić, bo metoda valueMap() zwraca tylko wartość. Z c++ dałoby się dobrać do jej wskaźnika, ale nie z Pythona. Trzeba więc zaimplementować metodę setValueMap(). Na razie jedyną dostępną dla Pythona metodą ustawiającą valueMap jest readSymbology(). Doraźnie więc jedyne rozwiązanie jakie widzę, to zrzucenie symbologii warstwy do xmla, znalezienie w nim tej mapy, edycja i ponowne ustawienie metodą readSymbology(). Trochę zabawy, ale powinno działać.
17-12-2010, 10:15,
#4
RE: Python: valueMap
Bardzo dziękuję za szybką odpowiedź - spróbuję dobrać się do słownika przez readSymbology() i writeSymbology() Smile

Pozdrawiam,
Damian
05-12-2011, 01:34,
#5
RE: Python: valueMap
Witam, właśnie "odgrzewam starego kotleta" Smile
ale chciałbym się zapytać, czy coś się zmieniło w kwestii dostępu do wartości słownikowych z poziomu Pythona?

Edycja słownika pozwoliłaby na połączenie z bazą PostGis i wykorzystanie w niej kluczy obcych - tak żeby zamiast wyświetlać wartości klucza mieć dostęp do wartości tabeli powiązanej. Każda zmiana słownika w bazie wprowadzała by zmiany w widokach formularzy - dla wszystkich - nie było by już konieczne żmudne tworzenie mapowania klucz-wartość w pliku csv i aktualizowanie każdego pliku projektu Smile

Pozdrawiam
Damian
05-12-2011, 08:48,
#6
RE: Python: valueMap
Cytat:Edycja słownika pozwoliłaby na połączenie z bazą PostGis i wykorzystanie w niej kluczy obcych - tak żeby zamiast wyświetlać wartości klucza mieć dostęp do wartości tabeli powiązanej. Każda zmiana słownika w bazie wprowadzała by zmiany w widokach formularzy - dla wszystkich - nie było by już konieczne żmudne tworzenie mapowania klucz-wartość w pliku csv i aktualizowanie każdego pliku projektu

W wersji 1.8 (1.9) Quantum GIS wprowadzono dodatkową funkcjonalność dotyczącą edycji atrybutów, która nazywa się Value Relation (Właściwości warstwy/Pola/Rodzaj edytora).
Zamiana ta ma szansę rozwiązać Twój problem (i moje oczekiwania też Smile ) pod warunkiem dodatkowego rozszerzenia. W chwili obecnej można wybrać dowolną warstwę, kolumnę z kluczem i kolumnę z wartościami jako bazę dla formularza z innej warstwy. Problem w tym, że tabela, której chcemy używać musi zostać dodana jako warstwa do projektu. Dodatkowym problemem jest to, że w tabeli atrybutów użytkownik widzi nie wartości, a klucze. Wartości są wyświetlane tylko w formularzach.

Wg mnie następujące dwie poprawki są niezbędne, aby ta funkcjonalność była przydatna (bardzo przydatna):
1. Musi istnieć możliwość dodania jako tabeli słownikowej (klucz-wartość) dowolnej tabeli z bazy danych. Inaczej większe projekty rozrosną się niesamowicie, kiedy zaczniemy dodawać do nich jako warstwy wszystkie niezbędne tabele.
2. W tabeli atrybutów musi istnieć możliwość wyświetlania wartości zamiast kluczy (może jakiś przełącznik?). Dla zwykłego użytkownika systemu to wartość jest ważna, nie klucz.

Wydaje mi się, że powyższe poprawki są stosunkowo łatwe do wprowadzenie, a byłby do duży krok naprzód dla projektów opartych na współpracy QGIS-PostgreSQL.
05-12-2011, 11:39, (Ten post był ostatnio modyfikowany: 05-12-2011, 13:35 {2} przez borys.)
#7
RE: Python: valueMap
Ponownie apeluję o zgłaszanie błędów i życzeń tutaj: http://hub.qgis.org/projects/quantum-gis/issues

Mieliśmy ochotnika do przeklejania stąd tam, ale chyba go inne obowiązki przygniotły.

Tymczasem może wystarczy zrobić własny formularz + funkcję wywoływaną przy odpalaniu go? Oczywiście, jeśli tabela słownikowa nie jest dodana do mapy, to trzeba by definiować osobne połączenie z bazą.
08-12-2011, 11:14,
#8
RE: Python: valueMap
Dziękuję za info, rzeczywiście własny formularz byłby najlepszym obecnie rozwiązaniem,
ale czy jest możliwe dynamiczne generowanie takiego formularza?
Tzn czy da się utworzyć taką funkcję wywoływaną aby generowała formularz zgodny z tabelą w bazie danych?
Nie jestem biegły w QT, czy ktoś mógłby przesłać mi taką przykładową funkcję - miałbym wtedy jakiś punkt zaczepienia...

Pozdrawiam
Damian
09-12-2011, 02:07,
#9
RE: Python: valueMap
W czeluściach Forum powinno być coś na temat "inicjacji formularza" Wink


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Python: selekcja elementów randyX 0 6 144 28-06-2016, 15:05
Ostatni post: randyX
  Kreator zapytań a Python Rayo 2 13 535 26-07-2012, 20:39
Ostatni post: Rayo
  Python - tabela atrybutów odwołanie Jarek_Re 6 31 381 30-05-2012, 11:51
Ostatni post: Rayo
  Python - pytanie Rayo 2 13 667 29-08-2011, 18:56
Ostatni post: Rayo
  Python Rayo 28 110 956 04-05-2011, 12:01
Ostatni post: Rayo

Skocz do: