QGIS प्लगइन: संसाधन आयात करने में समस्याएँ (resource_rc) फ़ाइल - प्लगइन लोड नहीं होता - PATH समस्याएं?


13

मैं qgis प्लगइन बना रहा हूँ और मुझे इस त्रुटि का हल नहीं मिल रहा है।

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

हर कोई है कि मैं अजगर संसाधन फ़ाइल बनाया जाएगा पूछ रहा हूँ के लिए:

pyrcc4 -o resources_napoved_rc.py resources_napoved.qrc

मुझे अभी भी इसे काम करने का तरीका नहीं मिला। मुझे हमेशा एक ही त्रुटि मिलती है।

मेरे पास स्क्रिप्ट के ऊपर:

import resources_napoved_rc.py

मैं सीधे क्यूटी बिल्डर से यूआई फ़ाइल का उपयोग कर रहा हूं। किसी भी विचार कैसे आगे बढ़ने के लिए? मैं मान रहा हूँ कि यह किसी तरह की समस्या या कुछ इसी तरह की होनी चाहिए।


No module named resources_napoved_rcऔर pyrcc4 -o resources_napoved_rc.py resources_napoved.qrcया यह एक टाइपिंग त्रुटि है?
जीन

नहीं, यह कोई टाइपो नहीं है। मैंने rc प्रत्यय जोड़ा क्योंकि ऐसा लगता है कि यह हमेशा फ़ाइल के अंत में rc की तलाश में है, भले ही आप file.qrcUI फ़ाइल में पास हों । (बहुत ही अजीब) मैंने सभी संभावित संयोजनों को भी आज़माया:pyrcc4 -o resources_napoved_rc.py resources_napoved_rc.qrc
ग्रेग

इसे इस तरह से .py के बिना आयात करने का प्रयास करेंimport resources_napoved_rc
मार्टिन

जवाबों:


19

यह समस्या uicठीक से काम नहीं करने के कारण होती है। मुझे ठीक-ठीक पता नहीं है कि मैं लक्षण और वर्कअराउंड क्यों दिखा सकता हूं।

प्रारंभिक प्लगइन .uiफ़ाइल में एक खाली resourcesतत्व है:

<resources/>

जब आप QtDesigner में प्लगइन के लिए संसाधनों को संपादित करते हैं, तो इसमें परिवर्तन होता है:

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

यह समस्या का स्रोत है। यदि आप .qrc फ़ाइल को बदलते हैं, तो इसमें त्रुटि के लिए टैग शामिलresourcesXXX.qrc होगा No module named resourcesXXX_rc

नोट: निम्नलिखित QGIS प्लगइन बिल्डर के सभी क्षेत्रों में दर्ज किए गए 'परीक्षण' के साथ एक प्लगइन बिल्ड पर आधारित है।

में test_dialog.py फ़ाइल निम्नलिखित लाइनों संकलन .ui फ़ाइल:

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

यहीं पर त्रुटि हो रही है।

अपनी .uiफ़ाइल को वापस बदलने के लिए संपादित करें <resources/>और समस्या हल हो गई है। जब तक आप अपने संवाद को QtDesigner में फिर से संपादित नहीं करते। .uiहर बार जब आप अपना संवाद संपादित करते हैं, तो आपको इसे फ़ाइल में संपादित करना होगा ।

इसका समाधान यह है कि काम करने के लिए अपने प्लगइन को बदल दें, काम किए गए प्लगइन के पुराने संस्करणों की तरह। इसमें _dialog.py फ़ाइल में uic कॉल और क्लास लाइन्स को बदलना शामिल है। इन पंक्तियों को बदलें:

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

class testDialog(QtGui.QDialog, FORM_CLASS):

साथ में:

from test_dialog_base import Ui_testDialogBase

class testDialog(QDockWidget, Ui_testDialogBase):

अब आपको दौड़ना पड़ेगा

pyuic4 -x test_dialog_base.ui > test_dialog_base.py

जब आप पहली बार अपना प्लगइन बनाते हैं और हर बार जब आप QtDesigner के साथ अपने प्लगइन संवाद को संपादित करते हैं। यह पुराना प्लगइन तरीका था।

चाहे .uiफ़ाइल को संपादित करना हो या pyuic4हर बार चलाना आपकी पसंद है।


मैरीबेथ, `संसाधन तत्व एक खाली तत्व होना चाहिए, न कि उस तत्व का समापन टैग।
मारीतोमो

9

आप निम्न काम करके .ui फ़ाइल या संकलन आदि को संपादित करने से बच सकते हैं:

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 '_rc' के लिए डिफॉल्ट करता है, यही कारण है कि यह हमेशा 'resource_rc' की तलाश में रहता है। (यदि आप वास्तव में संसाधनों का उपयोग करना चाहते हैं तो आप इसे हमेशा डिफ़ॉल्ट रूप से छोड़ सकते हैं।

और .ui फ़ाइल के sys.path में पथ को जोड़ने से अजगर को रिसोर्सेज़्मक खोजने की अनुमति मिलती है। आपको लगता है कि यह पता लगाने में सक्षम होगा क्योंकि आपकी वर्तमान निर्देशिका sys.path (और आपके वर्तमान निर्देशिका कार्य से अन्य आयात) में होने वाली है, लेकिन ऐसा नहीं है। मैं इसे बिल्कुल पता लगाने के लिए पर्याप्त क्यों नहीं देखा है।


8

मैंने आखिरकार 3 घंटे की कोशिश के बाद इसे ठीक कर लिया। जैसा कि किसी ने कहा कि क्यूटी डिजाइनर कहते हैं

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

अपने UI फ़ाइल के लिए। मैंने बस उन पंक्तियों को हटा दिया है और सब कुछ ठीक काम करता है (संसाधन जीयूआई में दिखाई देते हैं)


यह अभी भी QGIS 2.14 के साथ एक समस्या है, इसलिए इस और वर्थ लुत्ज़ के उत्तर ने बहुत मदद की!
एंड्रियास म्यूलर

2

मुझे लगता है कि इस समस्या का संक्षिप्त उत्तर यह है कि लोग प्रोजेक्ट को सीधे चलाने के बजाय QGIS में लोड कर रहे हैं:

make deploy

resources.pyपहली बार make deployचलाने के बाद ही फ़ाइल जनरेट होती है।


2

इस तरह मैंने समस्या को ठीक किया:

  • Run-> cmd

  • अपने प्लगइन बिल्डर (यानी: c: /users/rafik_pc/.qgis2/python/plugins/pluginbuilder) के स्थान पर जाएं

  • निम्न कमांड टाइप करें:

    pyrcc4 -py2 resources.qrc -o resources.py

(मैंने -py2 का उपयोग किया क्योंकि मैं अजगर 2.7 का उपयोग कर रहा हूं)

  • अपना QGIS पुनः आरंभ करें।

  • किया हुआ।


0

अंत में मेरे लिए जो काम किया गया था वह मूल संसाधनों का उपयोग करना था जब मैंने प्लगइन बिल्डर के साथ पैकेज बनाया और मेरे प्लगइन के अन्य सभी संवादों में इसका उपयोग किया। मुझे अभी भी नहीं पता है कि प्लगइन को पुन: लोड करने पर मेरे प्लगइन का मुख्य आइकन क्यों बदलता है, लेकिन फिर भी मुझे अन्य संवादों में ग्राफिक्स मिलते हैं।

काश यह कई कारणों से अलग होता। सरल प्लगइन के निर्माण के लिए यह दृष्टिकोण शायद काम करता है। यह एक संगठन है।

चूँकि मुझे इस संसाधन के साथ बहुत सारी समस्याएँ थीं इसलिए मैंने संसाधनों का निर्माण कर लिया है Oracle और Resources_rc.py यही कारण है कि मुझे पुनः लोड करते समय समस्याएँ आती हैं।

मेरे पास इस समस्या से निपटने का समय नहीं है, लेकिन क्यूजीआईएस देव टीम को इस ओर कुछ ध्यान देना चाहिए क्योंकि यह लोगों को सुंदर प्लगइन्स बनाने के लिए ब्लॉक करता है: डी

मैंने जो किया वह सरल किया है:

import resources

UI वर्ग को कॉल करने से पहले।

इस गंदगी के साथ मेरी मदद करने के लिए धन्यवाद।

PS: आपको अपने * .ui फ़ाइल में जोड़ने से पहले अपने संसाधनों को "संकलित" करना होगा और अपने सभी प्लगइन संवादों में समान संसाधनों -> आयात संसाधनों का उपयोग करना होगा। मुझे उम्मीद है इससे किसी को सहायता मिलेगी।


0

उसी कमांड का उपयोग करके निष्पादित करें

sudo pyrcc4 -o resource_rc.py resource.qrc

यह काम करेगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.