Buduję wtyczkę qgis i nie mogę znaleźć rozwiązania tego błędu.
File "/usr/lib/python2.7/dist-packages/qgis/utils.py", line 478, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
ImportError: No module named resources_napoved_rc
Dla wszystkich, którzy będą pytać, zbudowałem plik zasobów Pythona:
pyrcc4 -o resources_napoved_rc.py resources_napoved.qrc
Nadal nie mogę znaleźć sposobu, aby to zadziałało. Zawsze pojawia się ten sam błąd.
Oprócz skryptu mam:
import resources_napoved_rc.py
Używam pliku interfejsu użytkownika bezpośrednio z qtbuilder. Wszelkie pomysły, jak iść naprzód? Zakładam, że to musi być jakiś problem ze ścieżką lub coś podobnego.
pyqgis
qgis-plugins
pyqt
Greg
źródło
źródło
No module named resources_napoved_rc
ipyrcc4 -o resources_napoved_rc.py resources_napoved.qrc
czy to błąd w pisaniu?file.qrc
plik UI. (bardzo dziwne) Próbowałem także wszystkich możliwych kombinacji:pyrcc4 -o resources_napoved_rc.py resources_napoved_rc.qrc
import resources_napoved_rc
Odpowiedzi:
Przyczyną tego problemu jest
uic
nieprawidłowe działanie. Nie jestem pewien dokładnie, dlaczego, ale mogę pokazać objawy i obejście.Początkowy
.ui
plik wtyczki ma pustyresources
element:Podczas edycji zasobów wtyczki w QtDesigner zmienia się to na:
To jest źródło problemu. Jeśli zmienisz plik .qrc w tym tagu dołączania,
resourcesXXX.qrc
błąd zmieni się naNo module named resourcesXXX_rc
.Uwaga: poniższe informacje są oparte na kompilacji wtyczek z „testem” wprowadzonym we wszystkich polach konstruktora wtyczek QGIS.
W pliku test_dialog.py następujące wiersze kompilują plik .ui :
W tym miejscu występuje błąd.
Edytuj
.ui
plik, aby zmienić z powrotem,<resources/>
a problem zostanie rozwiązany. Do czasu ponownej edycji okna dialogowego w QtDesigner. Tę edycję należy wprowadzić do.ui
pliku po każdej edycji okna dialogowego.Rozwiązaniem tego jest zmiana wtyczki, aby działała tak, jak działały wcześniejsze wersje wtyczki. Obejmuje to zamianę wywołania interfejsu użytkownika i wierszy klasy w pliku _dialog.py . Zamień te linie:
z:
Musisz teraz biec
kiedy po raz pierwszy tworzysz wtyczkę i za każdym razem edytujesz okno dialogowe wtyczki za pomocą QtDesigner. To była stara metoda wtyczek.
Niezależnie od tego, czy chcesz edytować
.ui
plik, czy uruchomić zapyuic4
każdym razem, wybierasz.źródło
Możesz uniknąć edytowania pliku .ui lub kompilacji itp., Wykonując następujące czynności:
Zasób_suffix domyślnie ma wartość „_rc”, dlatego zawsze szuka wyrażenia „resources_rc”. (zawsze możesz zostawić to ustawienie domyślne, jeśli naprawdę chcesz użyć resources_rc, oczywiście)
Dołączenie ścieżki pliku .ui do sys.path pozwala pythonowi znaleźć resources.py. Można by pomyśleć, że będzie w stanie to rozgryźć, ponieważ bieżący katalog powinien znajdować się w sys.path (i inne importy z bieżącego katalogu działają), ale tak nie jest. Nie przyjrzałem się temu wystarczająco, aby dowiedzieć się dokładnie, dlaczego.
źródło
W końcu naprawiłem to po 3 godzinach prób. Jak ktoś powiedział, dodaje QT Designer
<resources> <include location="resources.qrc"/> </resources>
do pliku interfejsu użytkownika. Po prostu usunąłem te wiersze i wszystko działa dobrze (zasoby są widoczne w GUI)
źródło
Myślę, że krótką odpowiedzią na ten problem jest to, że ludzie ładują projekt bezpośrednio do QGIS zamiast uruchamiać:
Plik
resources.py
jest generowany dopiero po pierwszymmake deploy
uruchomieniu.źródło
W ten sposób naprawiłem problem:
Uruchom-> cmd
Przejdź do lokalizacji konstruktora wtyczek (np .: c: /users/rafik_pc/.qgis2/python/plugins/pluginbuilder)
wpisz następujące polecenie:
(Użyłem -py2, ponieważ używam Pythona 2.7)
zrestartuj swój QGIS.
GOTOWE.
źródło
Ostatecznie działało dla mnie wykorzystanie oryginalnych zasobów, które powstały podczas tworzenia pakietu za pomocą konstruktora wtyczek i użycie go we wszystkich innych oknach dialogowych mojej wtyczki. Nadal nie wiem, dlaczego główna ikona mojej wtyczki zmienia się podczas przeładowywania wtyczki, ale nadal dostaję grafikę w innych oknach dialogowych.
Chciałbym, żeby było inaczej z wielu powodów. W przypadku budowy prostej wtyczki takie podejście prawdopodobnie działa. To rzecz organizacyjna.
Ponieważ miałem tak wiele problemów z tymi zasobami, stworzyłem resources.py i resources_rc.py, dlatego prawdopodobnie mam problemy podczas przeładowywania.
Nie mam czasu, aby poradzić sobie z tym problemem, ale zespół deweloperów QGIS powinien zwrócić na to uwagę, ponieważ blokuje ludziom tworzenie pięknych wtyczek: D
Skończyło się na prostym:
przed wywołaniem klasy interfejsu użytkownika.
Dzięki za pomoc w tym bałaganie.
PS: musisz „skompilować” swoje zasoby przed dodaniem ich do pliku * .ui i użyj tych samych zasobów -> importuj zasoby we wszystkich oknach dialogowych wtyczek. Mam nadzieję, że to komuś pomoże.
źródło
Wykonaj to samo polecenie za pomocą
To będzie działać
źródło