Salut à tous !

Bon, ça fait 4 ans que je ne suis pas venu ici, j’ai un peu honte (j’ai plein de messages privés non répondu et maintenant c’est trop tard)…

Bref, je reviens avec une demande d’aide. Il faut voir que je suis obligé d’utiliser un environnement assez daté, donc je suis sur Python 2.7 et Qt 4 et je dois utiliser Basemap – oui, je sais qu’il est remplacé par Cartopy. En essayant de faire cohabiter tout ce beau monde, je tombe sur un problème que je n’arrive pas à corriger. Pire : je ne parviens pas à faire un exemple minimum et complet pour montrer le problème. Je me vois donc contrains de transmettre le contenu de tout mon code original, désolé.

Tout d’abord, voici l’erreur que j’obtiens :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
/nfs/Produits/publics/x86_64.Linux.RH6/python/2.7.5b/bin/python2.7 /home/lebarsy/codes/swec/main/swec.py
Traceback (most recent call last):
  File "/Produits/publics/x86_64.Linux.RH6/python/2.7.5b/lib/python2.7/site-packages/matplotlib-1.4.2-py2.7-linux-x86_64.egg/matplotlib/backends/backend_qt5.py", line 338, in resizeEvent
    self.draw()
  File "/Produits/publics/x86_64.Linux.RH6/python/2.7.5b/lib/python2.7/site-packages/matplotlib-1.4.2-py2.7-linux-x86_64.egg/matplotlib/backends/backend_qt5agg.py", line 148, in draw
    FigureCanvasAgg.draw(self)
  File "/Produits/publics/x86_64.Linux.RH6/python/2.7.5b/lib/python2.7/site-packages/matplotlib-1.4.2-py2.7-linux-x86_64.egg/matplotlib/backends/backend_agg.py", line 469, in draw
    self.figure.draw(self.renderer)
  File "/Produits/publics/x86_64.Linux.RH6/python/2.7.5b/lib/python2.7/site-packages/matplotlib-1.4.2-py2.7-linux-x86_64.egg/matplotlib/artist.py", line 59, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/Produits/publics/x86_64.Linux.RH6/python/2.7.5b/lib/python2.7/site-packages/matplotlib-1.4.2-py2.7-linux-x86_64.egg/matplotlib/figure.py", line 1079, in draw
    func(*args)
  File "/Produits/publics/x86_64.Linux.RH6/python/2.7.5b/lib/python2.7/site-packages/matplotlib-1.4.2-py2.7-linux-x86_64.egg/matplotlib/artist.py", line 59, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/Produits/publics/x86_64.Linux.RH6/python/2.7.5b/lib/python2.7/site-packages/matplotlib-1.4.2-py2.7-linux-x86_64.egg/matplotlib/axes/_base.py", line 1988, in draw
    self.apply_aspect()
  File "/Produits/publics/x86_64.Linux.RH6/python/2.7.5b/lib/python2.7/site-packages/matplotlib-1.4.2-py2.7-linux-x86_64.egg/matplotlib/axes/_base.py", line 1180, in apply_aspect
    pb1 = pb.shrunk_to_aspect(box_aspect, pb, fig_aspect)
  File "/Produits/publics/x86_64.Linux.RH6/python/2.7.5b/lib/python2.7/site-packages/matplotlib-1.4.2-py2.7-linux-x86_64.egg/matplotlib/transforms.py", line 596, in shrunk_to_aspect
    assert box_aspect > 0 and fig_aspect > 0
AssertionError
Techniquement, le code fonctionne tout de même et comme attendu, mais pour éviter des fonctionnements non désirés, je voudrais corriger cet avertissement.

En entrant dans le détail en faisant un pas à pas, il ressort que « box_aspect » a une valeur valide, mais qu’en revanche « fig_aspect » vaut zéro. Le problème, c’est que je ne sais pas comment cela a pu se produire.

Je vous fournis le contenu des codes tels qu’en leur état actuel, du coup avec la licence (LGPL).

Fichier swec.py (code principal) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
 
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
 
"""
Fichier principal de l’atelier SWEC.
 
:module: SWEC
:author: Yoann LE BARS
:version: 1.0
:date: 21/07/2017
:date: 24/07/2017
:date: 26/07/2017
:date: 27/07/2017
:date: 31/07/2017
:date: 01/08/2017
:date: 02/08/2017
:date: 03/08/2017
:date: 04/08/2017
:date: 09/08/2017
:date: 10/08/2017
:date: 16/08/2017
:date: 17/08/2017
:date: 18/08/2017
:date: 21/08/2017
 
   Lance la structure de base de l’application.
 
Python 2.7 : fonctionne
Python 3 : non-testé
 
Copyright 2017 CNES
 
    This program is free software: you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.
    This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.
"""
 
from PyQt4 import QtCore, QtGui, uic
import extractData
 
class MainWindow (QtGui.QMainWindow):
    """
    Classe principale de l’application.
    """
 
    def _enCours (self):
        """
        Fait apparaître un message indiquant une fonctionnalité en cours
        d’implémentation.
        """
 
        # Boîte de dialogue affichant le message.
        dialogue = QtGui.QMessageBox()
        # Message à afficher
        message = QtCore.QCoreApplication.translate('ManWindow',
                                                    u'<p>Fonctionnalité en '
                                                    u'cours '
                                                    u"d'implémentation.</p>")
        dialogue.setText(message)
        dialogue.exec_()
 
    def _aProposSWEC (self):
        """
        Message de présentation de l’atelier SWEC.
        """
 
        QtGui.QMessageBox.about(self, u'À propos de l’atelier SWEC',
                                u"<p>L’<b>atelier SWEC</b> est un ensemble "
                                u"d’outils destinés au traitement des "
                                u'données collectées par la mission '
                                u'satellite SWIM.</p><p><b>Auteurs : </b> '
                                u'Arnaud '
                                u'<font style="font-variant: '
                                u'small-caps">Jouzeau</font> et Yoann '
                                u'<font style="font-variant: small-caps">Le '
                                u'Bars</font></p><p>Icone maison et '
                                u'déplacement : Dave '
                                u'<font style="font-variant: '
                                u'small-caps">Gandy</font> de '
                                u'www.flaticon.com sous contrat CC 3.0 BY.</p>'
                                u'<p>Icones précédent et suivant : Freepik '
                                u'de www.flaticon.com sous <em>Flaticon Basic '
                                u'License</em>.</p><p>Icone zoom : SimpleIcon '
                                u'de www.flaticon.com sous contrat CC 3.0 '
                                u'BY.</p><p>Icone sélection : Those Icons de '
                                u'www.flaticon.com sous <em>Flaticon Basic '
                                u'License</em>.</p><p>Copyright © 2017 '
                                u'CNES</p>')
 
    def _connecterActions (self):
        """
        Association des actions aux différents éléments de l'interface.
        """
 
        self.ui.actionQuitter.triggered.connect(QtGui.qApp.quit)
        self.ui.actionAProposSWEC.triggered.connect(self._aProposSWEC)
        self.ui.actionAProposQt.triggered.connect(QtGui.qApp.aboutQt)
        self.ui.extractData.clicked.connect(self._enCours)
 
    def __init__ (self, fichier, fichierInterfaceExtractData, parent = None):
        """
        Constructeur (initialisateur) de la classe.
 
        :param fichier: Nom du fichier contenant la description QML de
                        l’interface
        :param fichierInterfaceExtractData: Nom du fichier contenant la
                                            description QML de l'interface
                                            d'extractData.
        :param parent: Pointeur vers une éventuelle classe parente.
        """
 
        super(MainWindow, self).__init__(parent)
        # Instance de l'interface de l'atelier.
        self.ui = uic.loadUi(fichier)
 
        # Message indiquant l'état de l'application.
        message = QtCore.QCoreApplication.translate('MainWindow',
                                                    u'Initialisation.')
        self.ui.statusbar.showMessage(message)
        self.ui.show()
        self._connecterActions()
 
        # Instance de l’interface pour l'extraction de données.
        self.extractData =\
            extractData.ExtractData(fichierInterfaceExtractData, self)
 
        # Message indiquant qu'une opération a été réalisée.
        self.fini = QtCore.QCoreApplication.translate('MainWindow', u'Fini.')
 
        message = QtCore.QCoreApplication.translate('MainWindow', u'Prêt.')
        self.ui.statusbar.showMessage(message)
 
def main ():
    """
    Fonction principale du programme.
    :return: 0 si tout s’est déroulé convenablement, code d’erreur sinon.
    """
 
    import sys
    import argparse
 
    # Analyseur de la ligne de commande.
    analyseur = argparse.ArgumentParser(description=u"L’atelier SWEC est "
                                                    u"une interface "
                                                    u"graphique pour gérer "
                                                    u"les données générées "
                                                    u"par la mission "
                                                    u"satellite SWIM.")
    analyseur.add_argument("-v", "--version", action = "store_true",
                           help = u"Indique la version du programme.")
    # Arguments de la ligne de commande.
    arguments = analyseur.parse_args()
 
    if arguments.version:
        print("1.0")
        return 0
    else:
        # Instance de l'application.
        app = QtGui.QApplication(sys.argv)
        # Instance de la fenêtre principale.
        mainWindow = MainWindow('mainUi.ui', 'extractData.ui')
        return app.exec_()
 
if __name__ == '__main__':
    main()
Fichier extractData.py – l’erreur se produit dans ce fichier, plus particulièrement à la dernière ligne de __init__ :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
 
# -*- coding: utf-8 -*-
 
"""
Extraction des données depuis une collection de fichiers.
 
:module: extractData
:author: Yoann LE BARS
:version: 1.0
:date: 10/08/2017
:date: 16/08/2017
:date: 17/08/2017
:date: 21/08/2017
 
Python 2.7 : fonctionne
Python 3 : non-testé
 
Copyright 2017 CNES
 
    This program is free software: you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.
    This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.
"""
 
from PyQt4 import QtGui, uic
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4 import NavigationToolbar2QT as NavigationToolbar
from matplotlib.widgets import RectangleSelector
import numpy as np
 
class ExtractData (QtGui.QWidget):
    """
    Classe principale pour l’extraction des données.
    """
 
    def _selectionAppel (self, eClic, eRelache):
        """
        Permet la sélection d’un élément à l’aide d’un rectangle.
 
        :param eClic: Évènement lorsque le bouton gauche de la souris est
                      appuyé.
        :param eRelache: Évènement correspondant à la relache du bouton
                         gauche de la souris.
        """
 
        # Localisation du pointeur de la souris lors de l’appuie du bouton
        # gauche.
        x1, y1 = eClic.xdata, eClic.ydata
        # Coordonnées du pointeur de la souris lorsque le bouton gauche est
        # relaché.
        x2, y2 = eRelache.xdata, eRelache.ydata
        # Coordonnées du premier point en latitude et longitude terrestres.
        lon1, lat1 = self.carte(x1, y1, inverse = True)
        # Coordonnées du deuxième point en latitude et longitude terrestre.
        lon2, lat2 = self.carte(x2, y2, inverse = True)
        print("(%3.2f, %3.2f) --> (%3.2f, %3.2f)" % (lon1, lat1, lon2, lat2))
 
    def _initial (self):
        """
        Retourne à la vue initiale
        """
 
        self.navigation.home()
 
    def _precedent (self):
        """
        Retourne à la vue précédente.
        """
 
        self.navigation.back()
 
    def _suivant (self):
        """
        Retourne à la vue suivante.
        """
 
        self.navigation.forward()
 
    def _deplace (self):
        """
        Déplace la vue.
        """
 
        self.navigation.pan()
 
    def _agrandi (self):
        """
        Agrandi une zone de la vue.
        """
 
        self.navigation.zoom()
 
    def _basculeSelecteur (self):
        """
        Active et désactive la sélection.
        """
 
        # if self.selecteurRectangle.active:
        #     self.selecteurRectangle.set_active(False)
        # else:
        #     self.selecteurRectangle.set_active(True)
        self.selecteurRectangle.set_active(not self.selecteurRectangle.active)
        # if evenement.key in ['Q', 'q'] and self.selecteurRectangle.active:
        #     self.selecteurRectangle.set_active(False)
        # if evenement.key in ['A', 'a'] and not self.selecteurRectangle.active:
        #     self.selecteurRectangle.set_active(True)
 
    def _connecterActions (self):
        """
        Connecte les fonctions aux évènements.
        """
 
        self.ui.boutonInitial.clicked.connect(self._initial)
        self.ui.boutonPrecedent.clicked.connect(self._precedent)
        self.ui.boutonSuivant.clicked.connect(self._suivant)
        self.ui.boutonDeplace.clicked.connect(self._deplace)
        self.ui.boutonAgrandi.clicked.connect(self._agrandi)
        self.ui.boutonSelection.clicked.connect(self._basculeSelecteur)
 
    def _definiInterface (self, parent):
        """
        Mise en place de l'interface de l’outil de sélection.
 
        :param parent: Pointeur vers le widget parent.
        """
 
        # Zone où tracer la carte.
        self.figure, self.axes = plt.subplots()
 
        # Carte en projection orthonormale.
        self.carte = Basemap(projection = 'gall', llcrnrlat = -90,
                             urcrnrlat=90, llcrnrlon = -180, urcrnrlon = 180,
                             resolution = 'c', ax = self.axes)
        self.carte.drawcoastlines(linewidth = 0.25)
        self.carte.fillcontinents(color = 'coral', lake_color = 'aqua')
        self.carte.drawmapboundary(fill_color = 'aqua')
        # self.carte.bluemarble()
        # Liste des parallèles à afficher.
        paralleles = np.arange(-90, 90, 30)
        self.carte.drawparallels(paralleles,
                                 labels = [False, True, True, False])
        # Liste des méridiens à afficher.
        meridiens = np.arange(0, 360, 30)
        self.carte.drawmeridians(meridiens,
                                 labels = [True, False, False, True])
 
        # Liaison de la zone de tracé.
        self.zoneTrace = FigureCanvas(self.figure)
        self.zoneTrace.setSizePolicy(QtGui.QSizePolicy.Expanding,
                                     QtGui.QSizePolicy.Expanding)
        self.zoneTrace.updateGeometry()
        # Outils de navigation.
        self.navigation = NavigationToolbar(self.zoneTrace, self)
        self.navigation.hide()
        # self.ui.gridLayout_3.addWidget(self.navigation)
        self.ui.gridLayout_3.addWidget(self.zoneTrace)
        parent.ui.gridLayout.addWidget(self.ui)
 
        # Selecteur de zone par rectangle.
        self.selecteurRectangle = RectangleSelector(self.axes,
                                                    self._selectionAppel,
                                                    drawtype = 'box',
                                                    useblit = True,
                                                    button = [1],
                                                        minspanx = 5,
                                                    minspany = 5,
                                                    spancoords = 'pixels')
        # self.zoneTrace.mpl_connect('key_press_event', self._basculeSelecteur)
        self._connecterActions()
 
    def __init__ (self, fichier, parent):
        """
        Constructeur (initialisateur) de la classe.
 
        :param fichier: Nom du fichier contenant la description QML de
                        l'interface
        :param parent: Pointeur vers l’objet parent dans l’interface (zone
                       centrale de la fenêtre principale.
        """
 
        super(ExtractData, self).__init__(parent)
 
        # Instance de l’interface du module.
        self.ui = uic.loadUi(fichier)
 
        self._definiInterface(parent)
 
        self.zoneTrace.draw()
Fichier mainUi.ui :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
 
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <author>Yoann LE BARS</author>
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>1072</width>
    <height>822</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Atelier SWEC</string>
  </property>
  <property name="locale">
   <locale language="French" country="France"/>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QScrollArea" name="scrollArea">
    <property name="geometry">
     <rect>
      <x>-1</x>
      <y>-1</y>
      <width>211</width>
      <height>731</height>
     </rect>
    </property>
    <property name="widgetResizable">
     <bool>true</bool>
    </property>
    <widget class="QWidget" name="scrollAreaWidgetContents_3">
     <property name="geometry">
      <rect>
       <x>0</x>
       <y>0</y>
       <width>209</width>
       <height>729</height>
      </rect>
     </property>
     <layout class="QVBoxLayout" name="verticalLayout">
      <item>
       <widget class="QGroupBox" name="groupBox">
        <property name="title">
         <string>Données</string>
        </property>
        <widget class="QPushButton" name="extractData">
         <property name="geometry">
          <rect>
           <x>10</x>
           <y>20</y>
           <width>171</width>
           <height>23</height>
          </rect>
         </property>
         <property name="toolTip">
          <string>Lance l’outil de sélection des données à traiter.</string>
         </property>
         <property name="text">
          <string>Outil_extract_données</string>
         </property>
        </widget>
       </widget>
      </item>
     </layout>
    </widget>
   </widget>
   <widget class="QWidget" name="gridLayoutWidget">
    <property name="geometry">
     <rect>
      <x>219</x>
      <y>9</y>
      <width>661</width>
      <height>721</height>
     </rect>
    </property>
    <layout class="QGridLayout" name="gridLayout"/>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>1072</width>
     <height>21</height>
    </rect>
   </property>
   <widget class="QMenu" name="menuFichier">
    <property name="title">
     <string>&amp;Fichier</string>
    </property>
    <addaction name="actionQuitter"/>
   </widget>
   <widget class="QMenu" name="menuEdition">
    <property name="title">
     <string>&amp;Edition</string>
    </property>
   </widget>
   <widget class="QMenu" name="menuAffichage">
    <property name="title">
     <string>&amp;Affichage</string>
    </property>
   </widget>
   <widget class="QMenu" name="menuOutils">
    <property name="title">
     <string>&amp;Outils</string>
    </property>
   </widget>
   <widget class="QMenu" name="menuA_ide">
    <property name="title">
     <string>A&amp;ide</string>
    </property>
    <addaction name="actionAProposSWEC"/>
    <addaction name="actionAProposQt"/>
   </widget>
   <addaction name="menuFichier"/>
   <addaction name="menuEdition"/>
   <addaction name="menuAffichage"/>
   <addaction name="menuOutils"/>
   <addaction name="menuA_ide"/>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
  <action name="actionQuitter">
   <property name="text">
    <string>&amp;Quitter</string>
   </property>
   <property name="toolTip">
    <string>Quitter</string>
   </property>
   <property name="shortcut">
    <string>Ctrl+Q</string>
   </property>
  </action>
  <action name="actionOuvrir">
   <property name="text">
    <string>&amp;Ouvrir</string>
   </property>
  </action>
  <action name="actionAgrandirImage">
   <property name="text">
    <string>&amp;Agrandir l'image</string>
   </property>
  </action>
  <action name="actionReduireImage">
   <property name="text">
    <string>&amp;Réduire l'image</string>
   </property>
  </action>
  <action name="actionTailleNormale">
   <property name="text">
    <string>Taille &amp;initiale</string>
   </property>
  </action>
  <action name="actionAProposSWEC">
   <property name="text">
    <string>À propos de l’atelier &amp;SWEC</string>
   </property>
  </action>
  <action name="actionAProposQt">
   <property name="text">
    <string>À propos de &amp;Qt</string>
   </property>
  </action>
 </widget>
 <resources/>
 <connections/>
</ui>
Fichier extractData.ui :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
 
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <layout class="QGridLayout" name="gridLayout">
   <item row="0" column="0">
    <widget class="QTabWidget" name="tabWidget">
     <property name="locale">
      <locale language="French" country="France"/>
     </property>
     <property name="currentIndex">
      <number>0</number>
     </property>
     <widget class="QWidget" name="tab_1">
      <attribute name="title">
       <string>Sélection de la zone</string>
      </attribute>
      <attribute name="toolTip">
       <string>Sélection de la zone géographique, de l’intervalle de temps et la mission à partir desquels importer les données.</string>
      </attribute>
      <layout class="QGridLayout" name="gridLayout_2">
       <item row="1" column="0">
        <layout class="QVBoxLayout" name="verticalLayout">
         <item>
          <layout class="QFormLayout" name="formLayout">
           <item row="0" column="0">
            <widget class="QLabel" name="label_3">
             <property name="text">
              <string>Mission :</string>
             </property>
            </widget>
           </item>
           <item row="0" column="1">
            <widget class="QComboBox" name="choixMission">
             <item>
              <property name="text">
               <string>CFOSAT</string>
              </property>
             </item>
            </widget>
           </item>
           <item row="1" column="0">
            <widget class="QLabel" name="label_4">
             <property name="text">
              <string>Instrument :</string>
             </property>
            </widget>
           </item>
           <item row="1" column="1">
            <widget class="QComboBox" name="choixInstrument">
             <item>
              <property name="text">
               <string>SWIM</string>
              </property>
             </item>
            </widget>
           </item>
           <item row="3" column="0">
            <widget class="QLabel" name="label">
             <property name="text">
              <string>Date de début :</string>
             </property>
            </widget>
           </item>
           <item row="3" column="1">
            <widget class="QDateTimeEdit" name="dateTimeEdit">
             <property name="displayFormat">
              <string>d/MMM/yyyy h:mm</string>
             </property>
             <property name="calendarPopup">
              <bool>true</bool>
             </property>
            </widget>
           </item>
           <item row="4" column="0">
            <widget class="QLabel" name="label_2">
             <property name="text">
              <string>Date de fin :</string>
             </property>
            </widget>
           </item>
           <item row="4" column="1">
            <widget class="QDateTimeEdit" name="dateTimeEdit_2">
             <property name="displayFormat">
              <string>d/MMM/yyyy h:mm</string>
             </property>
             <property name="calendarPopup">
              <bool>true</bool>
             </property>
            </widget>
           </item>
           <item row="2" column="0">
            <widget class="QLabel" name="label_5">
             <property name="text">
              <string>Niveau(x) :</string>
             </property>
            </widget>
           </item>
           <item row="2" column="1">
            <widget class="QListWidget" name="listWidget">
             <property name="selectionMode">
              <enum>QAbstractItemView::MultiSelection</enum>
             </property>
             <item>
              <property name="text">
               <string>L0</string>
              </property>
             </item>
             <item>
              <property name="text">
               <string>L1A</string>
              </property>
             </item>
             <item>
              <property name="text">
               <string>L1B</string>
              </property>
             </item>
             <item>
              <property name="text">
               <string>L2</string>
              </property>
             </item>
            </widget>
           </item>
          </layout>
         </item>
         <item>
          <widget class="QWidget" name="widget" native="true">
           <layout class="QGridLayout" name="gridLayout_4">
            <item row="0" column="1">
             <widget class="QPushButton" name="boutonPrecedent">
              <property name="text">
               <string/>
              </property>
              <property name="icon">
               <iconset>
                <normaloff>../ressources/left-chevron.png</normaloff>../ressources/left-chevron.png</iconset>
              </property>
             </widget>
            </item>
            <item row="0" column="2">
             <widget class="QPushButton" name="boutonSuivant">
              <property name="text">
               <string/>
              </property>
              <property name="icon">
               <iconset>
                <normaloff>../ressources/right-chevron.png</normaloff>../ressources/right-chevron.png</iconset>
              </property>
             </widget>
            </item>
            <item row="0" column="3">
             <widget class="QPushButton" name="boutonDeplace">
              <property name="text">
               <string/>
              </property>
              <property name="icon">
               <iconset>
                <normaloff>../ressources/move-option.png</normaloff>../ressources/move-option.png</iconset>
              </property>
             </widget>
            </item>
            <item row="0" column="5">
             <widget class="QPushButton" name="boutonSelection">
              <property name="text">
               <string/>
              </property>
              <property name="icon">
               <iconset>
                <normaloff>../ressources/select.png</normaloff>../ressources/select.png</iconset>
              </property>
             </widget>
            </item>
            <item row="0" column="4">
             <widget class="QPushButton" name="boutonAgrandi">
              <property name="text">
               <string/>
              </property>
              <property name="icon">
               <iconset>
                <normaloff>../ressources/magnifier.png</normaloff>../ressources/magnifier.png</iconset>
              </property>
             </widget>
            </item>
            <item row="0" column="0">
             <widget class="QPushButton" name="boutonInitial">
              <property name="text">
               <string/>
              </property>
              <property name="icon">
               <iconset>
                <normaloff>../ressources/home.png</normaloff>../ressources/home.png</iconset>
              </property>
             </widget>
            </item>
            <item row="1" column="0" colspan="6">
             <layout class="QGridLayout" name="gridLayout_3"/>
            </item>
           </layout>
          </widget>
         </item>
        </layout>
       </item>
      </layout>
     </widget>
     <widget class="QWidget" name="tab_2">
      <attribute name="title">
       <string>Tab 2</string>
      </attribute>
     </widget>
    </widget>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections/>
</ui>
Encore désolé de ne pas avoir trouvé un moyen de mieux isoler le problème. Si quelqu’un a une piste, je suis preneur parce que de mon côté les recherches sur le web n’ont rien donné.

À bientôt.

Le Farfadet Spatial