16 votos

Plugin QGIS: Problemas al importar el archivo resources (resources_rc) - el plugin no se carga - ¿Problemas con PATH?

Estoy construyendo qgis plugin y no puedo encontrar la solución para este error.

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

Para todo el mundo que estará preguntando he construido python archivo de recursos:

pyrcc4 -o resources_napoved_rc.py resources_napoved.qrc

Sigo sin encontrar la manera de hacerlo funcionar. Siempre me da el mismo error.

En la parte superior de la secuencia de comandos que tengo:

import resources_napoved_rc.py

Estoy usando el archivo ui directamente desde qtbuilder. ¿Alguna idea de cómo seguir adelante? Supongo que esto debe ser algún tipo de problema de ruta o algo similar.

23voto

Harvey Twyman Puntos 1

Este problema se debe a uic no funciona correctamente. No sé exactamente por qué, pero puedo mostrar los síntomas y una solución.

El plugin inicial .ui tiene un resources elemento:

<resources/>

Al editar los recursos para el plugin en QtDesigner esto cambia a:

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

Este es el origen del problema. Si cambia el archivo .qrc en ese incluir etiqueta a resourcesXXX.qrc el error cambiará a No module named resourcesXXX_rc .

Nota: lo que sigue se basa en la construcción de un plugin con 'test' introducido en todos los campos del constructor de plugins de QGIS.

En el test_dialog.py las siguientes líneas compilan el archivo .ui archivo:

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

Aquí es donde se produce el error.

Edita tu .ui para volver a cambiar a <resources/> y el problema queda resuelto. Hasta vuelves a editar tu diálogo en QtDesigner. Debe realizar esta edición en el archivo .ui después de cada edición.

La solución es cambiar el plugin para que funcione como las versiones anteriores. Esto implica la sustitución de la uic y las líneas de clase en diálogo.py archivo. Sustituya estas líneas:

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

class testDialog(QtGui.QDialog, FORM_CLASS):

con:

from test_dialog_base import Ui_testDialogBase

class testDialog(QDockWidget, Ui_testDialogBase):

Ahora tendrá que ejecutar

pyuic4 -x test_dialog_base.ui > test_dialog_base.py

cuando cree su plugin por primera vez y cada vez que edite el diálogo de su plugin con QtDesigner. Este era el antiguo método de plugins.

Si se edita el .ui o la ejecución pyuic4 cada vez es su elección.

14voto

velvetmonster Puntos 31

Puede evitar tener que editar el archivo .ui o compilar, etc haciendo lo siguiente:

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 por defecto es '_rc', por lo que siempre busca 'resources_rc' (puedes dejarlo por defecto si realmente quieres usar resources_rc, por supuesto).

Y añadiendo la ruta del archivo .ui a sys.path permite a python encontrar resources.py. Uno pensaría que sería capaz de averiguarlo ya que tu directorio actual se supone que está en sys.path (y otras importaciones desde tu directorio actual funcionan), pero no lo hace. No he investigado lo suficiente para averiguar exactamente por qué.

10voto

TardisGuy Puntos 216

Por fin lo he arreglado después de 3 horas intentándolo. Como alguien dijo QT Designer añade

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

a su archivo de interfaz de usuario. Simplemente he eliminado esas filas y todo funciona correctamente (los recursos son visibles en la interfaz gráfica de usuario).

2voto

Alexander Azarov Puntos 2262

Creo que la respuesta corta a este problema es que la gente está cargando el proyecto directamente en QGIS en lugar de ejecutarlo:

make deploy

El expediente resources.py sólo se genera después de la primera vez make deploy se ejecuta.

2voto

Tristen Puntos 133

Así es como solucioné el problema:

  • Ejecutar->cmd

  • Vaya a la ubicación de su plugin builder (es decir: c:/users/rafik_pc/.qgis2/python/plugins/pluginbuilder)

  • escriba el siguiente comando:

    pyrcc4 -py2 resources.qrc -o resources.py

(He usado -py2 porque estoy usando python 2.7)

  • reinicie su QGIS.

  • HECHO.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X