QGIS eklentisi: Kaynakları içe aktarma sorunları (resources_rc) - eklenti yüklenmiyor - PATH sorunları?


13

Qgis eklentisi oluşturuyorum ve bu hataya çözüm bulamıyorum.

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

Herkes python kaynakları dosyası inşa ettik soracak herkes için:

pyrcc4 -o resources_napoved_rc.py resources_napoved.qrc

Hala çalışmasını sağlayacak bir yol bulamıyorum. Hep aynı hatayı alıyorum.

Senaryo üstünde ben var:

import resources_napoved_rc.py

Doğrudan qtbuilder'dan ui dosyası kullanıyorum. Nasıl ilerleyeceğiniz hakkında bir fikriniz var mı? Bunun bir tür yol sorunu veya benzer bir şey olması gerektiğini varsayıyorum.


No module named resources_napoved_rcve pyrcc4 -o resources_napoved_rc.py resources_napoved.qrcya bir yazım hatasıdır?
gen

Hayır, bu bir yazım hatası değil. file.qrcUI dosyasında geçseniz bile her zaman dosyanın sonunda rc arıyor gibi görünüyor çünkü rc soneki ekledim . (çok garip) Tüm olası kombinasyonları da denedim:pyrcc4 -o resources_napoved_rc.py resources_napoved_rc.qrc
Greg

Böyle .py olmadan içe aktarmaya çalışınimport resources_napoved_rc
Martin

Yanıtlar:


19

Bu sorunun nedeni uicdüzgün çalışmıyor. Tam olarak neden olduğundan emin değilim, ancak belirtileri ve bir çözümü gösterebilirim.

İlk eklenti .uidosyasının boş bir resourcesöğesi var:

<resources/>

QtDesigner'daki eklentinin kaynaklarını düzenlediğinizde bu şu şekilde değişir:

<resources>
  <include location="resources.qrc"/>
</resources>

Sorunun kaynağı budur. Bu içerme etiketindeki .qrc dosyasını resourcesXXX.qrcdeğiştirirseniz hata olarak değişir No module named resourcesXXX_rc.

Not: Aşağıdakiler, QGIS eklenti oluşturucunun tüm alanlarına 'test' girilmiş bir eklenti derlemesine dayanmaktadır.

Gelen test_dialog.py dosyasına aşağıdaki satırları derlemek .ui dosyası:

FORM_CLASS, _ = uic.loadUiType(os.path.join(
    os.path.dirname(__file__), 'test_dialog_base.ui'))

Hatanın oluştuğu yer burasıdır.

.uiGeri dönmek için dosyanızı düzenleyin <resources/>ve sorun çözüldü. QtDesigner'da iletişim kutunuzu yeniden düzenlemeye kadar . İletişiminizi .uiher düzenledikten sonra bu düzenlemeyi dosyada yapmanız gerekir.

Bunun çözümü, eklentinizin çalıştığı eklentinin önceki sürümleri gibi çalışmasını sağlamaktır. Bu değiştirmeyi içerir uic çağrıyı ve sınıf çizgileri _dialog.py dosyası. Bu satırları değiştirin:

FORM_CLASS, _ = uic.loadUiType(os.path.join(
    os.path.dirname(__file__), 'test_dialog_base.ui'))

class testDialog(QtGui.QDialog, FORM_CLASS):

ile:

from test_dialog_base import Ui_testDialogBase

class testDialog(QDockWidget, Ui_testDialogBase):

Şimdi koşman gerekecek

pyuic4 -x test_dialog_base.ui > test_dialog_base.py

eklentinizi ilk oluşturduğunuzda ve eklenti iletişim kutunuzu QtDesigner ile her düzenlediğinizde. Bu eski eklenti yöntemiydi.

Her seferinde .uidosyayı veya çalıştırmayı düzenlemek pyuic4sizin seçiminizdir.


MaryBeth, `kaynak öğesi, o öğenin kapanış etiketi değil, boş bir öğe olmalıdır.
mariotomo

9

Aşağıdakileri yaparak .ui dosyasını düzenlemek veya derlemek, vb. Yapmaktan kaçınabilirsiniz:

import sys
sys.path.append(os.path.dirname(__file__))
FORM_CLASS, _ = uic.loadUiType(os.path.join(
    os.path.dirname(__file__), 'test_dialog_base.ui'), resource_suffix='')

resource_suffix varsayılan olarak '_rc' olur, bu yüzden her zaman 'resources_rc' araması yapar. (tabii ki resources_rc'yi gerçekten kullanmak istiyorsanız her zaman varsayılan olarak bırakabilirsiniz)

Ve .ui dosyasının yolunu sys.path dosyasına eklemek, python'un resources.py dosyasını bulmasını sağlar. Geçerli dizininizin sys.path (ve geçerli dizininizdeki diğer içe aktarma işlemleri) içinde olması gerektiği için bunu anlayabileceğinizi düşünürsünüz, ancak yapmaz. Tam olarak nedenini anlamaya yetecek kadar bakmadım.


8

Sonunda 3 saat denedikten sonra düzelttim. Birinin söylediği gibi QT Designer

<resources> <include location="resources.qrc"/> </resources>

UI dosyanıza. Ben sadece bu satırları sildim ve her şey iyi çalışıyor (kaynaklar GUI'de görülebilir)


Hala QGIS 2.14 ile ilgili bir sorun, bu yüzden Worth Lutz ve bu cevap çok yardımcı oldu!
Andreas Müller

2

Bu sorunun kısa cevabının, insanların projeyi çalıştırmak yerine doğrudan QGIS'e yükledikleri olduğunu düşünüyorum:

make deploy

Dosya resources.pyyalnızca ilk make deployçalıştırıldıktan sonra oluşturulur .


2

Sorunu şu şekilde çözdüm:

  • Run> cmd

  • Eklenti oluşturucunuzun konumuna gidin (ör: c: /users/rafik_pc/.qgis2/python/plugins/pluginbuilder)

  • aşağıdaki komutu yazın:

    pyrcc4 -py2 resources.qrc -o resources.py

(-Py2 kullandım çünkü python 2.7 kullanıyorum)

  • QGIS'inizi yeniden başlatın.

  • YAPILAN.


0

Sonunda benim için işe yarayan, eklenti oluşturucu ile paket oluşturduğumda gelen orijinal kaynakları kullanmak ve eklentimin diğer tüm iletişim kutularında kullanmaktı. Eklentiyi yeniden yüklerken eklentimin ana simgesinin neden değiştiğini hala bilmiyorum, ancak yine de diğer iletişim kutularında grafikler alıyorum.

Bunun birçok nedenden dolayı farklı olmasını isterdim. Basit bir eklenti oluşturmak için bu yaklaşım muhtemelen işe yarar. Bu bir organizasyon meselesi.

Bu kaynaklarla ilgili çok fazla sorun yaşadığımdan beri resources.py ve resources_rc.py oluşturdum, muhtemelen bu yüzden yeniden yüklerken sorun yaşıyorum.

Bu sorunla başa çıkmak için zamanım yok ama QGIS geliştirici ekibi buna dikkat etmeli çünkü insanları güzel eklentiler yapmalarını engelliyor: D

Yaptığım şey basit olmak:

import resources

UI sınıfını çağırmadan önce.

Bu karmaşa için bana yardım ettiğin için teşekkürler.

Not: kaynaklarınızı * .ui dosyanıza eklemeden önce "derlemeniz" ve tüm eklenti iletişim kutularında aynı kaynakları kullan -> kaynakları içe aktarmanız gerekir. Umarım bu birine yardımcı olur.


0

Aynı komutu kullanarak

sudo pyrcc4 -o resources_rc.py sources.qrc

Çalışacak

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.