¿Los complementos se bloquean con "Ningún módulo llamado qgsprojectionselectionwidget" en Windows?

8

Mi complemento Python QGIS funciona en Ubuntu (al menos para mí, y todos los errores fatales reportados hasta ahora están resueltos), pero cuando lo ejecuto en QGIS instalado desde el instalador oficial de 2.10.1 de 64 bits para Windows (en Windows 7 64- bit), no puedo instalarlo debido al siguiente error:

This plugin is broken
No module named qgsprojectionselectionwidget

Otro usuario también informó de este problema. pero con otro mensaje de error (no sé qué sistema operativo y arquitectura tiene, pero supongo que Windows y EDITAR de 64 bits: adiviné mal, tiene Mac OS X):

This plugin is broken
No module named qgsmaplayercombobox

Ambos se refieren a widgets en el formulario GUI, que construí a través de Qt Designer en Ubuntu. Qt Designer también incluye el instalador QGIS para Windows y afirma contener los mismos widgets personalizados de QGIS, por lo que el problema no debería estar en los widgets que faltan, y QGIS debería reconocerlos, pero no lo hace.

Entonces, ¿cómo solucionarlo? Mi complemento aún es experimental, así que puedo agregar "perdón, no funciona bajo Windows" a los metadatos, pero no es una solución real.

EDITAR: el mismo comportamiento confirmado en la versión de 32 bits también.

Ahora encontré una buena pista al comentar esta respuesta : utilícela os.path.joinpara hacer que los caminos sean multiplataforma. Esto es fácil para las pocas rutas codificadas que tengo, pero los errores parecen sugerir que el problema es más profundo, tal vez incluso en Qt. ¿Cómo puedo manejar este problema en mi plugin sin modificar nada más?

Pavel V.
fuente

Respuestas:

22

Probablemente su QGIS está intentando importar su widget desde un archivo .h como en c ++.

Abra su archivo .ui y busque líneas:

<customwidget>
   <class>QgsProjectionSelectionWidget</class>
   <extends>QWidget</extends>
   <header>qgsprojectionselectionwidget.h</header>
  </customwidget>

Luego, en su etiqueta de encabezado, cambie a:

<customwidget>
   <class>QgsProjectionSelectionWidget</class>
   <extends>QWidget</extends>
   <header>qgis.gui</header>
  </customwidget>

Cambie la misma etiqueta para todos sus widgets con error (qgsmaplayercombobox, etc.).

dmh126
fuente
0

La respuesta de @ dmh126 es buena. Especialmente, si trabaja con pyqt - pyqgis, debe escribir en from qgis._gui import *lugar de import QgsProjectionSelectionWidget.

Mustafa Uçar
fuente