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 :
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.
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
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) :
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 #!/usr/bin/env python2.7 # -*- coding: utf-8 -*- """ Fichier principal de latelier 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 lapplication. 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 lapplication. """ def _enCours (self): """ Fait apparaître un message indiquant une fonctionnalité en cours dimplé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 latelier SWEC. """ QtGui.QMessageBox.about(self, u'À propos de latelier SWEC', u"<p>L<b>atelier SWEC</b> est un ensemble " u"doutils 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 linterface :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 linterface 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 sest déroulé convenablement, code derreur sinon. """ import sys import argparse # Analyseur de la ligne de commande. analyseur = argparse.ArgumentParser(description=u"Latelier 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 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
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 lextraction des données. """ def _selectionAppel (self, eClic, eRelache): """ Permet la sélection dun élément à laide dun 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 lappuie 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 loutil 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 lobjet parent dans linterface (zone centrale de la fenêtre principale. """ super(ExtractData, self).__init__(parent) # Instance de linterface du module. self.ui = uic.loadUi(fichier) self._definiInterface(parent) self.zoneTrace.draw()
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 <?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 loutil 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>&Fichier</string> </property> <addaction name="actionQuitter"/> </widget> <widget class="QMenu" name="menuEdition"> <property name="title"> <string>&Edition</string> </property> </widget> <widget class="QMenu" name="menuAffichage"> <property name="title"> <string>&Affichage</string> </property> </widget> <widget class="QMenu" name="menuOutils"> <property name="title"> <string>&Outils</string> </property> </widget> <widget class="QMenu" name="menuA_ide"> <property name="title"> <string>A&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>&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>&Ouvrir</string> </property> </action> <action name="actionAgrandirImage"> <property name="text"> <string>&Agrandir l'image</string> </property> </action> <action name="actionReduireImage"> <property name="text"> <string>&Réduire l'image</string> </property> </action> <action name="actionTailleNormale"> <property name="text"> <string>Taille &initiale</string> </property> </action> <action name="actionAProposSWEC"> <property name="text"> <string>À propos de latelier &SWEC</string> </property> </action> <action name="actionAProposQt"> <property name="text"> <string>À propos de &Qt</string> </property> </action> </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é.
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 lintervalle 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>
À bientôt.
Le Farfadet Spatial
Partager