ปลั๊กอิน QGIS: ปัญหาการนำเข้าไฟล์ (resources_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

ฉันใช้ไฟล์ ui โดยตรงจาก qtbuilder แนวคิดใดที่จะก้าวไปข้างหน้า? ฉันสมมติว่านี่จะต้องมีปัญหาเส้นทางบางอย่างหรือบางอย่างที่คล้ายกัน


No module named resources_napoved_rcและpyrcc4 -o resources_napoved_rc.py resources_napoved.qrcหรือเป็นข้อผิดพลาดในการพิมพ์?
ยีน

ไม่มันไม่ใช่พิมพ์ผิด ฉันเพิ่มส่วนต่อท้าย rc เนื่องจากดูเหมือนว่าจะมองหา rc ที่ส่วนท้ายของไฟล์เสมอแม้ว่าคุณจะผ่านfile.qrcไฟล์ UI (แปลกมาก) ฉันลองชุดค่าผสมที่เป็นไปได้ทั้งหมดด้วย:pyrcc4 -o resources_napoved_rc.py resources_napoved_rc.qrc
Greg

ลองนำเข้าโดยไม่ต้อง. py เช่นนี้import resources_napoved_rc
Martin

คำตอบ:


19

ปัญหานี้เกิดจากuicการทำงานไม่ถูกต้อง ฉันไม่แน่ใจว่าทำไม แต่ฉันสามารถแสดงอาการและวิธีแก้ปัญหา

.uiไฟล์ปลั๊กอินเริ่มต้นมีresourcesองค์ประกอบที่ว่างเปล่า:

<resources/>

เมื่อคุณแก้ไขทรัพยากรสำหรับปลั๊กอินใน QtDesigner การเปลี่ยนแปลงนี้จะเป็น:

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

นี่คือสาเหตุของปัญหา หากคุณเปลี่ยนไฟล์ .qrc ในการที่รวมถึงแท็กในข้อผิดพลาดจะเปลี่ยนไปresourcesXXX.qrcNo 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ไฟล์หลังจากแต่ละครั้งที่คุณแก้ไขไดอะล็อก

วิธีแก้ไขปัญหานี้คือเปลี่ยนปลั๊กอินให้ทำงานเหมือนปลั๊กอินรุ่นก่อน ๆ สิ่งนี้เกี่ยวข้องกับการแทนที่การเรียกuicและบรรทัดคลาสในไฟล์_dialog.py แทนที่บรรทัดเหล่านี้:

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ในแต่ละครั้งเป็นตัวเลือกของคุณ


MaryBeth องค์ประกอบ `ทรัพยากรควรเป็นองค์ประกอบที่ว่างเปล่าไม่ใช่แท็กปิดขององค์ประกอบนั้น
mariotomo

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' ซึ่งเป็นสาเหตุที่มักจะมองหา 'resources_rc' (คุณสามารถปล่อยไว้ที่ค่าเริ่มต้นหากคุณต้องการใช้ resources_rc แน่นอน)

และต่อท้ายพา ธ ของไฟล์. ui ไปยัง sys.path จะอนุญาตให้ python ค้นหา resources.py คุณคิดว่ามันจะสามารถคิดออกได้เนื่องจากไดเรกทอรีปัจจุบันของคุณควรอยู่ใน sys.path (และการนำเข้าอื่น ๆ จากไดเรกทอรีปัจจุบันของคุณทำงาน) แต่มันก็ไม่ได้ ฉันไม่ได้มองมันมากพอที่จะคิดออกว่าทำไม


8

ในที่สุดฉันก็ซ่อมมันหลังจากพยายาม 3 ชั่วโมง อย่างที่ใครบางคนบอกว่า QT Designer เพิ่ม

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

ไปยังไฟล์ UI ของคุณ ฉันเพียงแค่ลบแถวเหล่านั้นและทุกอย่างทำงานได้ดี (ทรัพยากรสามารถมองเห็นได้ใน GUI)


มันยังคงมีปัญหากับ QGIS 2.14 ดังนั้นคำตอบนี้และคำตอบที่คุ้มค่าลัทซ์ช่วยได้มาก!
Andreas Müller

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 เพราะฉันใช้ python 2.7)

  • รีสตาร์ท QGIS ของคุณ

  • DONE


0

สิ่งที่ใช้ได้ผลสำหรับฉันในตอนท้ายคือการใช้ทรัพยากรดั้งเดิมที่มาเมื่อฉันสร้างแพ็คเกจด้วยตัวสร้างปลั๊กอินและใช้ในกล่องโต้ตอบอื่น ๆ ทั้งหมดของปลั๊กอินของฉัน ฉันยังไม่รู้ว่าทำไมไอคอนหลักของปลั๊กอินเปลี่ยนแปลงเมื่อทำการรีโหลดปลั๊กอิน แต่ยังคงได้รับกราฟิกในกล่องโต้ตอบอื่น

ฉันหวังว่าสิ่งนี้จะแตกต่างไปจากหลายสาเหตุ สำหรับการสร้างปลั๊กอินอย่างง่ายวิธีการนี้อาจใช้งานได้ มันเป็นเรื่องขององค์กร

เนื่องจากฉันมีปัญหามากมายกับแหล่งข้อมูลนี้ฉันได้สร้าง resources.py และ resources_rc.py นั่นอาจเป็นสาเหตุที่ฉันได้รับปัญหาเมื่อโหลดซ้ำ

ฉันไม่มีเวลาที่จะจัดการกับปัญหานี้ แต่ทีม dev QGIS ควรให้ความสนใจกับมันเพราะมันบล็อกคนให้ทำปลั๊กอินที่สวยงาม: D

สิ่งที่ฉันทำคือการมีง่ายๆ:

import resources

ก่อนเรียกคลาส UI

ขอบคุณที่ช่วยฉันด้วยสิ่งนี้

PS: คุณต้อง "รวบรวม" ทรัพยากรของคุณก่อนที่จะเพิ่มลงในไฟล์ * .ui ของคุณและใช้ทรัพยากรเดียวกัน -> นำเข้าทรัพยากรในกล่องโต้ตอบปลั๊กอินทั้งหมดของคุณ ฉันหวังว่านี่จะช่วยให้ใครบางคน


0

ดำเนินการคำสั่งเดียวกันโดยใช้

sudo pyrcc4 -o resources_rc.py resources.qrc

มันจะทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.