Formularze dla edycji danych - 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: Formularze dla edycji danych (/thread-505.html) |
RE: Formularze dla edycji danych - Rayo - 22-09-2011 W końcu się dowiedziałem, co to jest ta inicjacja... RE: Formularze dla edycji danych - borys - 23-09-2011 ojtam ojtam :p RE: Formularze dla edycji danych - brylu - 23-09-2011 (22-09-2011, 00:02)borys napisał(a): W Designerze możesz podłączać sygnały z jednych widgetów bezpośrednio do slotów innych widgetów (np. sygnał pressed z klawisza do slotu clear linii edycyjnej albo close całego okna), ale wiele więcej się w ten sposób nie zdziała. Tak właśnie mi się wydawało, że w Designerze nie można zrobić takiego szacher-macher Na artykuł, który podałeś w linku trafiłem już wcześniej ale nie bardzo rozumiem co tam jest czym - może dlatego, że nie znam pythona w ogóle i nie umiem się posługiwać jego składnią (kiedyś bawiłem się tylko trochę w delphi). Żeby zacząć coś samemu potrzebuję najprostszego skryptu z wyjaśnieniem co jest co i ewentualnie zaznaczeniem co do czego się odwołuje, wtedy może jakoś uda mi się z tym wystartować. Jak komuś z Was się będzie chciało takie coś zrobić to będę wdzięczny. Taki rodzaj inicjacji.... RE: Formularze dla edycji danych - Rayo - 23-09-2011 Zachęcony opisem sposobu rozszerzenia funkcjonalności formularzy też postanowiłem przejść inicjację Podczas testów zauważyłem, że jeżeli raz wywołamy taki zmodyfikowany formularz, a następnie zmienimy coś w kodzie, zapiszemy i wywołamy ponownie, to QGIS nie widzi tych zmian. Nie pomaga przeładowanie projektu. Konieczne jest całkowite zamknięcie i ponowne uruchomienie programu. Dodatkowo po zamknięciu pojawia się informacja, że QGIS działał nieprawidłowo i został zamknięty (QGIS 1.7 i 1.8, WinXP). Co ciekawe, w oknie z opisem błędów w QGIS (Wystąpił błąd podczas wykonywania kodu Pythona: Traceback (most recent call last):......) pojawia się zawsze aktualny kod, ale wykonywany jest ten z pierwszego uruchomienia formularza. Poza tym wszystko działa Później wrzucę kawałek kodu. Poniżej zamieszczam przykład formularza z rozszerzonym zakresem funkcji. Przykład jest podobny do problemu, który próbuje rozwiązać brylu. W oknie mamy 4 Radio Buttony, którymi wybieramy porę roku. Obok jest Combo Box z listą miesięcy danej pory. Zmiana pory roku powoduje zmianę listy miesięcy. [attachment=87]rys1 Kod: # -*- coding: utf-8 -*- Kod należy zapisać w pliku pory_roku_funkcje.py w katalogu z projektem. Definicja formularza w załączniku (należy zmienić rozszerzenie z txt na ui). Ustawienia warstwy, do której dodajemy formularz [attachment=88]rys2 RE: Formularze dla edycji danych - brylu - 26-09-2011 Rayo jesteś wielki Co prawda nie usiadłem do tego jeszcze i dzisiaj pewnie już nie usiądę bo nie znajdę na to czasu.... (choć kusi mnie żeby rzucić wszystko inne). Z pewnością jednak startuję od jutra i dam znać jak mi poszło. RE: Formularze dla edycji danych - Rayo - 26-09-2011 Uważaj na linie 'global wiosna' i 'global miesiac'. Przy kopiowaniu coś za bardzo się przesunęły i mogą powodować błąd. Mają mieć takie same wcięcia jak linie następujące po nich. Życzę powodzenia. Daj znać, czy przy stosowaniu takich rozszerzonych formularzy QGIS zgłasza błąd podczas wychodzenia z programu. RE: Formularze dla edycji danych - brylu - 27-09-2011 Dobra. Mam pierwsze pytania. 1. Czym u Ciebie w projekcie jest okno? Czy to jest nazwa QGroupBox na którym znajdują sie QRadioButtony? A może coś innego? 2. w inicjacji podajesz w nawiasie jakieś zmienne (formularz,idWarstwy,idObiektu). Do czego się one odnoszą? 3. Dlaczego w miesiac.addItems zapisujesz u'Marzec', u'Kwiecień', u'Maj'? Co to znaczy? To na wstępie tyle W każdym razie robię małe kroczki naprzód Na początek odtworzyłem w pełni Twój formularz. Niestety, prawdopodobnie mam coś nie tak z pythonem na komputerze, bo przy próbie odpalenia wywala jakieś dwa błędy ale podobnie historie mam również z większością wtyczek więc to prawdopodobnie nie jest wina skryptu. Tak czy inaczej skrypt nie działa... Natomiast efekt błędu przy zamykaniu QGIS (1.7 Wrocław) osiągnąłem w pełni Będę musiał to przetestować na innym komputerze jeszcze. RE: Formularze dla edycji danych - Rayo - 27-09-2011 ad 2. To są zmienne wejściowe do funkcji. My wykorzystujemy tylko 'formularz', czyli nasz formularz stworzony w QT Designerze. ad 1. 'okno' to to samo co 'formularz' 'okno=formularz'. Przypisanie jest po to, aby obiekt był widziany globalnie. ad 3. 'u' przed łańcuchem znaków oznacza, że jest to łańcuch unicode. Tzn, że możesz w nim używać polskich znaków. RE: Formularze dla edycji danych - brylu - 28-09-2011 Ok. Testowałem już na innym kompie i niestety dalej nic. Za każdym razem kiedy uruchamia się formularz wyskakują jakieś błędy pythona. Zastanawiam się czy może coś jeszcze powinienem doinstalować na komputerze. W dalszej kolejności sam formularz sie pojawia ale nie ma opcji walidacji. Tak przy okazji czy mógłbyś opisać w jaki sposób działa Twój skrypt? To znaczy co się dzieje kiedy zmieniam np. radiobutton na wiosna albo na lato? RE: Formularze dla edycji danych - Rayo - 28-09-2011 Co to za błąd? Pokaż zrzut ekranu, albo skopiuj tekst błędu. W załączniku umieściłem plik z kodem. Trzeba mu tylko zmienić rozszerzenie na .py Może przy wklejaniu tekstu coś się poprzestawiało i stąd te błędy. Opis skryptu: Ustawienie kodowania na utf8 (żeby nie było problemu z polskimi znakami), import modułów QT, wyczyszczenie zmiennych. Kod: # -*- coding: utf-8 -*- Funkcja inicjalizująca formularz - podpina dodatkowe funkcje pod określone sygnały (te których nie dało się podpiąć w QT Designerze) - przypisanie naszego formularza do obiektu globalnego (widzianego we wszystkich funkcjach) okno - przypisanie poszczególnych RadioButtonów do obiektów globalnych - przypisanie ComboBoxa do obiektu globalnego - podłączenie sygnałów zmiany stanu RadioButtonów do odpowiednich funkcji Kod: def inicjacja(formularz,idWarstwy,idObiektu): Funkcja zmieniająca listę miesięcy w ComboBox - sprawdzenie, czy stan zmienił się na 'włączony' - wyczyszczenie listy miesięcy - dodanie nowych pozycji do listy miesięcy Kod: def menuWiosna(test): |