2017-05-19 1 views
0

Je construis un plugin QGIS avec Python et j'ai conçu une interface graphique pour celui-ci. Je peux le compiler avec pyuic4, mais en charge ça donne une erreur. J'ai découvert que je peux empêcher cette erreur en ajoutant la ligne ci-dessous dans le code Python compilé. Seulement à certains moments je dois recompiler et donc le fichier est écrasé et la ligne est perdue.Python Charger le module dans le parent pour éviter les problèmes d'écrasement

form.py

from qgis.gui import QgsMapLayerComboBox 

J'ai un fichier 'parent' qui importe la version compilée par:

dialog.py

from form import Ui_Dialog 

Est-il possible d'importer le QgsMapLayerComboBox dans dialog.py, donc je n'ai pas besoin de l'ajouter chaque fois à form.py après avoir recompilé mon interface graphique?

EDIT:

<widget class="QgsMapLayerComboBox" name="mMapLayerComboBox"> 
<property name="geometry"> 
    <rect> 
    <x>100</x> 
    <y>18</y> 
    <width>160</width> 
    <height>22</height> 
    </rect> 
</property> 
<property name="filters"> 
    <set>QgsMapLayerProxyModel::RasterLayer</set> 
</property> 
</widget> 
</widget> 
<customwidgets> 
<customwidget> 
<class>QgsMapLayerComboBox</class> 
<extends>QComboBox</extends> 
<header>qgsmaplayercombobox.h</header> 
</customwidget> 
</customwidgets> 
+0

Je conçois une interface graphique avec Qt Designer qui est installé avec QGIS. Le fichier de sauvegarde est un fichier XML. Donc, quand je fais des changements à ma conception graphique, je reçois un nouveau XML. Pour pouvoir l'utiliser, je dois le 'compiler' (un meilleur choix de mots aurait probablement été 'convertir') avec pyuic4 du code XML vers le code Python. – Matthieu

+0

Pouvez-vous fournir un fichier XML ** minimaliste ** qui illustre le problème? –

+0

@three_pineapples J'ai édité ma question et ajouté une partie du XML. C'est un widget personnalisé destiné à être utilisé dans QGIS. Vous pensez à un moyen d'ajouter automatiquement l'importation requise? – Matthieu

Répondre

2

Ouvrez votre form.ui avec un éditeur de texte et remplacez:

<customwidget> 
<class>QgsMapLayerComboBox</class> 
<extends>QComboBox</extends> 
<header>qgsmaplayercombobox.h</header> 
</customwidget> 

avec

<customwidget> 
<class>QgsMapLayerComboBox</class> 
<extends>QComboBox</extends> 
<header>qgis.gui</header> 
</customwidget> 

et recompiler.