Les plugins se bloquent avec «Aucun module nommé qgsprojectionselectionwidget» dans Windows?

8

Mon plugin Python QGIS fonctionne sur Ubuntu (au moins pour moi, et tous les bogues fatals signalés jusqu'à présent sont résolus), mais lorsque je l'exécute sur QGIS installé à partir du programme d'installation officiel 2.10.1 64 bits pour Windows (sur Windows 7 64- peu), je ne peux pas l'installer en raison de l'erreur suivante:

This plugin is broken
No module named qgsprojectionselectionwidget

Un autre utilisateur a également signalé ce problème. mais avec un autre message d'erreur (je ne sais pas quel système d'exploitation et quelle architecture a-t-il, mais je suppose que Windows et EDIT 64 bits: je me suis trompé, il a Mac OS X):

This plugin is broken
No module named qgsmaplayercombobox

Les deux se réfèrent aux widgets dans le formulaire GUI, que j'ai construit via Qt Designer dans Ubuntu. Qt Designer est également livré avec le programme d'installation QGIS pour Windows et prétend contenir les mêmes widgets personnalisés QGIS, donc le problème ne devrait pas être dans ces widgets manquants, et QGIS devrait les reconnaître - mais ce n'est pas le cas.

Alors comment y remédier? Mon plugin est encore expérimental, je peux donc simplement ajouter "désolé, ne fonctionne pas sous Windows" aux métadonnées, mais ce n'est pas une vraie solution.

EDIT: le même comportement confirmé sur la version 32 bits aussi.

Maintenant, j'ai trouvé un bon indice en commentaire de cette réponse : utilisez os.path.joinpour faire les chemins multi-plateforme. C'est facile pour les quelques chemins codés en dur que j'ai, mais les erreurs semblent suggérer que le problème est plus profond, peut-être même dans Qt. Comment puis-je gérer ce problème dans mon plugin sans modifier quoi que ce soit d'autre?

Pavel V.
la source

Réponses:

23

Votre QGIS essaie probablement d'importer votre widget à partir d'un fichier .h comme en c ++.

Veuillez ouvrir votre fichier .ui et rechercher des lignes:

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

Puis, dans votre balise d'en-tête, changez en:

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

Changez la même balise pour tous vos widgets avec erreur (qgsmaplayercombobox etc.).

dmh126
la source
0

La réponse de @ dmh126 est bonne. Surtout, si vous travaillez avec pyqt - pyqgis, vous devriez écrire à la from qgis._gui import *place de import QgsProjectionSelectionWidget.

Mustafa Uçar
la source