wolfhece 2.0.3__py3-none-any.whl → 2.0.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wolfhece/PyDraw.py +1 -1
- wolfhece/PyGui.py +1 -1
- wolfhece/RatingCurve_xml.py +1 -1
- wolfhece/cli.py +57 -0
- wolfhece/fonts/arial.ttf +0 -0
- wolfhece/fonts/helvetica.ttf +0 -0
- wolfhece/fonts/sanserif.ttf +0 -0
- wolfhece/libs/GL/gl.h +1044 -0
- wolfhece/libs/GL/glaux.h +272 -0
- wolfhece/libs/GL/glcorearb.h +3597 -0
- wolfhece/libs/GL/glext.h +11771 -0
- wolfhece/libs/GL/glu.h +255 -0
- wolfhece/libs/GL/glxext.h +926 -0
- wolfhece/libs/GL/wglext.h +840 -0
- wolfhece/libs/WolfOGL.c +28187 -0
- wolfhece/locales/{en-GB/LC_MESSAGES/base.po → base.pot} +19 -11
- wolfhece/models/HECE_169.pptx +0 -0
- wolfhece/models/blue.pal +9 -0
- wolfhece/models/diff16.pal +65 -0
- wolfhece/models/diff3.pal +13 -0
- wolfhece/models/red.pal +9 -0
- wolfhece/models/shields.pal +33 -0
- wolfhece/models/shields_cst.pal +21 -0
- wolfhece/models/waterdepths.pal +33 -0
- wolfhece/ui/wolf_multiselection_collapsiblepane.py +346 -0
- {wolfhece-2.0.3.dist-info → wolfhece-2.0.4.dist-info}/METADATA +9 -10
- {wolfhece-2.0.3.dist-info → wolfhece-2.0.4.dist-info}/RECORD +32 -33
- wolfhece-2.0.4.dist-info/entry_points.txt +8 -0
- wolfhece/apps/WolfPython.png +0 -0
- wolfhece/bernoulli/MQTT/CurlPython.py +0 -50
- wolfhece/bernoulli/MQTT/Example_MQTT_Epanet_Ana.py +0 -67
- wolfhece/bernoulli/MQTT/Local_File.py +0 -139
- wolfhece/bernoulli/MQTT/Local_Test_Thingsboard.py +0 -94
- wolfhece/bernoulli/MQTT/NewTestThings.py +0 -90
- wolfhece/bernoulli/MQTT/Reader_Thingsboard.py +0 -40
- wolfhece/bernoulli/MQTT/Thingsboard.py +0 -76
- wolfhece/bernoulli/Pyth_bern.cp37-win_amd64.pyd +0 -0
- wolfhece/bernoulli/exit3.png +0 -0
- wolfhece/bernoulli/exit7.png +0 -0
- wolfhece/bernoulli/exit8.png +0 -0
- wolfhece/bernoulli/fib8.cp37-win_amd64.pyd +0 -0
- wolfhece/lazviewer/libs/qt_plugins/platforms/qwindows.dll +0 -0
- wolfhece/libs/compile_wcython.py +0 -25
- wolfhece/locales/en/LC_MESSAGES/base.mo +0 -0
- wolfhece/locales/en/LC_MESSAGES/base.po +0 -53
- wolfhece/locales/en-GB/LC_MESSAGES/base.mo +0 -0
- wolfhece/locales/fr/LC_MESSAGES/base.mo +0 -0
- wolfhece/locales/fr/LC_MESSAGES/base.po +0 -62
- wolfhece/locales/fr-FR/LC_MESSAGES/base.mo +0 -0
- wolfhece/locales/fr-FR/LC_MESSAGES/base.po +0 -62
- wolfhece-2.0.3.dist-info/LICENCE +0 -19
- /wolfhece/{bernoulli/MQTT → fonts}/__init__.py +0 -0
- /wolfhece/{libs → ui}/__init__.py +0 -0
- {wolfhece-2.0.3.dist-info → wolfhece-2.0.4.dist-info}/WHEEL +0 -0
- {wolfhece-2.0.3.dist-info → wolfhece-2.0.4.dist-info}/top_level.txt +0 -0
@@ -5,7 +5,7 @@
|
|
5
5
|
msgid ""
|
6
6
|
msgstr ""
|
7
7
|
"Project-Id-Version: PACKAGE VERSION\n"
|
8
|
-
"POT-Creation-Date: 2021-11-22
|
8
|
+
"POT-Creation-Date: 2021-11-22 17:39+0100\n"
|
9
9
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
10
10
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
11
11
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
@@ -15,39 +15,47 @@ msgstr ""
|
|
15
15
|
"Generated-By: pygettext.py 1.5\n"
|
16
16
|
|
17
17
|
|
18
|
-
#:
|
18
|
+
#: PyDraw.py:207
|
19
|
+
msgid "Open"
|
20
|
+
msgstr ""
|
21
|
+
|
22
|
+
#: PyDraw.py:208
|
23
|
+
msgid "Save"
|
24
|
+
msgstr ""
|
25
|
+
|
26
|
+
#: PyGuiHydrology.py:14
|
19
27
|
msgid "General parameters"
|
20
28
|
msgstr ""
|
21
29
|
|
22
|
-
#: PyGuiHydrology.py:
|
30
|
+
#: PyGuiHydrology.py:14
|
23
31
|
msgid "Main model"
|
24
32
|
msgstr ""
|
25
33
|
|
26
|
-
#: PyGuiHydrology.py:
|
34
|
+
#: PyGuiHydrology.py:15
|
27
35
|
msgid "Basin"
|
28
36
|
msgstr ""
|
29
37
|
|
30
|
-
#: PyGuiHydrology.py:
|
38
|
+
#: PyGuiHydrology.py:15
|
31
39
|
msgid "Basin parameters"
|
32
40
|
msgstr ""
|
33
41
|
|
34
|
-
#: PyGuiHydrology.py:
|
42
|
+
#: PyGuiHydrology.py:16
|
35
43
|
msgid "&Parameters"
|
36
|
-
msgstr "
|
44
|
+
msgstr ""
|
37
45
|
|
38
|
-
#: PyGuiHydrology.py:
|
46
|
+
#: PyGuiHydrology.py:19
|
39
47
|
msgid "My new tool..."
|
40
48
|
msgstr ""
|
41
49
|
|
42
|
-
#: PyGuiHydrology.py:
|
50
|
+
#: PyGuiHydrology.py:19
|
43
51
|
msgid "New tool"
|
44
52
|
msgstr ""
|
45
53
|
|
46
|
-
#: PyGuiHydrology.py:
|
54
|
+
#: PyGuiHydrology.py:20
|
47
55
|
msgid "&Tools"
|
48
56
|
msgstr ""
|
49
57
|
|
50
|
-
#: PyGuiHydrology.py:
|
58
|
+
#: PyGuiHydrology.py:31
|
51
59
|
msgid "Do anything !!"
|
52
60
|
msgstr ""
|
53
61
|
|
Binary file
|
wolfhece/models/blue.pal
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
16
|
2
|
+
-25.0
|
3
|
+
128
|
4
|
+
255
|
5
|
+
255
|
6
|
+
-15.0
|
7
|
+
89
|
8
|
+
172
|
9
|
+
255
|
10
|
+
-5.0
|
11
|
+
72
|
12
|
+
72
|
13
|
+
255
|
14
|
+
-3.0
|
15
|
+
0
|
16
|
+
0
|
17
|
+
255
|
18
|
+
-2.0
|
19
|
+
0
|
20
|
+
128
|
21
|
+
0
|
22
|
+
-1.0
|
23
|
+
0
|
24
|
+
221
|
25
|
+
55
|
26
|
+
-0.5
|
27
|
+
128
|
28
|
+
255
|
29
|
+
128
|
30
|
+
0.0
|
31
|
+
255
|
32
|
+
255
|
33
|
+
0
|
34
|
+
0.5
|
35
|
+
255
|
36
|
+
128
|
37
|
+
0
|
38
|
+
1.0
|
39
|
+
235
|
40
|
+
174
|
41
|
+
63
|
42
|
+
2.0
|
43
|
+
255
|
44
|
+
0
|
45
|
+
0
|
46
|
+
3.0
|
47
|
+
209
|
48
|
+
71
|
49
|
+
12
|
50
|
+
5.0
|
51
|
+
128
|
52
|
+
0
|
53
|
+
0
|
54
|
+
15.0
|
55
|
+
185
|
56
|
+
0
|
57
|
+
0
|
58
|
+
25.0
|
59
|
+
111
|
60
|
+
111
|
61
|
+
111
|
62
|
+
50.0
|
63
|
+
192
|
64
|
+
192
|
65
|
+
192
|
wolfhece/models/red.pal
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
8
|
2
|
+
0.0
|
3
|
+
0
|
4
|
+
255
|
5
|
+
255
|
6
|
+
0.039999999
|
7
|
+
0
|
8
|
+
255
|
9
|
+
255
|
10
|
+
0.04
|
11
|
+
0
|
12
|
+
0
|
13
|
+
255
|
14
|
+
0.059999999
|
15
|
+
0
|
16
|
+
0
|
17
|
+
255
|
18
|
+
0.06
|
19
|
+
255
|
20
|
+
128
|
21
|
+
0
|
22
|
+
0.119999999
|
23
|
+
255
|
24
|
+
128
|
25
|
+
0
|
26
|
+
0.12
|
27
|
+
255
|
28
|
+
0
|
29
|
+
0
|
30
|
+
0.2
|
31
|
+
255
|
32
|
+
0
|
33
|
+
0
|
@@ -0,0 +1,346 @@
|
|
1
|
+
import wx
|
2
|
+
import logging
|
3
|
+
|
4
|
+
class Wolf_TwoLists_Transfer(wx.Panel):
|
5
|
+
""" Panel with 2 lists to select multiple items from 1 to 2 or from 2 to 1"""
|
6
|
+
|
7
|
+
def __init__(self, parent, **kwargs):
|
8
|
+
"""
|
9
|
+
@param parent : wx.Window
|
10
|
+
@param kwargs : dict - other arguments for wx.Panel (example : max_selected_items=3, delete_if_transfer=True)
|
11
|
+
"""
|
12
|
+
|
13
|
+
super().__init__(parent)
|
14
|
+
|
15
|
+
self.delete_if_transfer = True
|
16
|
+
self.max_selected_items = None
|
17
|
+
|
18
|
+
if 'max_selected_items' in kwargs:
|
19
|
+
self.max_selected_items = kwargs['max_selected_items']
|
20
|
+
assert isinstance(self.max_selected_items, int), "max_selected_items must be an integer"
|
21
|
+
|
22
|
+
if 'delete_if_transfer' in kwargs:
|
23
|
+
self.delete_if_transfer = kwargs['delete_if_transfer']
|
24
|
+
assert isinstance(self.delete_if_transfer, bool), "delete_if_transfer must be a boolean"
|
25
|
+
|
26
|
+
# Créer les deux listes à sélection multiples
|
27
|
+
self.list1 = wx.ListBox(self, style=wx.LB_EXTENDED | wx.LB_NEEDED_SB)
|
28
|
+
self.list2 = wx.ListBox(self, style=wx.LB_EXTENDED | wx.LB_NEEDED_SB)
|
29
|
+
|
30
|
+
# Créer les boutons pour transférer les éléments sélectionnés
|
31
|
+
self.button1to2 = wx.Button(self, label=">>")
|
32
|
+
self.button2to1 = wx.Button(self, label="<<")
|
33
|
+
|
34
|
+
# Créer les boutons pour trier les listes
|
35
|
+
self.buttonSort1 = wx.Button(self, label="Sort left")
|
36
|
+
self.buttonSort2 = wx.Button(self, label="Sort right")
|
37
|
+
self.buttonall1to2 = wx.Button(self, label="All 1 >> 2")
|
38
|
+
self.buttonall2to1 = wx.Button(self, label="All 1 << 2")
|
39
|
+
|
40
|
+
# créer le sizer vertical pour les boutons
|
41
|
+
sizer_vertical = wx.BoxSizer(wx.VERTICAL)
|
42
|
+
sizer_vertical.Add(self.button1to2, proportion=1, flag=wx.GROW | wx.ALL, border=2)
|
43
|
+
sizer_vertical.Add(self.button2to1, proportion=1, flag=wx.GROW | wx.ALL, border=2)
|
44
|
+
sizer_vertical.Add(self.buttonSort1, proportion=1, flag=wx.GROW | wx.ALL, border=2)
|
45
|
+
sizer_vertical.Add(self.buttonSort2, proportion=1, flag=wx.GROW | wx.ALL, border=2)
|
46
|
+
sizer_vertical.Add(self.buttonall1to2, proportion=1, flag=wx.GROW | wx.ALL, border=2)
|
47
|
+
sizer_vertical.Add(self.buttonall2to1, proportion=1, flag=wx.GROW | wx.ALL, border=2)
|
48
|
+
|
49
|
+
# Créer le sizer horizontal pour aligner les éléments
|
50
|
+
sizer_horizontal = wx.BoxSizer(wx.HORIZONTAL)
|
51
|
+
|
52
|
+
# Ajouter les éléments au sizer horizontal
|
53
|
+
sizer_horizontal.Add(self.list1, proportion=1, flag=wx.GROW | wx.ALL, border=2)
|
54
|
+
sizer_horizontal.Add(sizer_vertical,proportion=1, flag=wx.GROW | wx.ALL, border=2)
|
55
|
+
sizer_horizontal.Add(self.list2, proportion=1, flag=wx.GROW | wx.ALL, border=2)
|
56
|
+
|
57
|
+
# Définir le sizer pour le panneau
|
58
|
+
self.SetSizer(sizer_horizontal)
|
59
|
+
# self.Layout()
|
60
|
+
sizer_horizontal.SetSizeHints(self)
|
61
|
+
|
62
|
+
self._ui_bind_actions()
|
63
|
+
|
64
|
+
def get_values(self):
|
65
|
+
""" Get values of the lists """
|
66
|
+
return self.list2.Items
|
67
|
+
|
68
|
+
def set_max_selected_items(self, max_selected_items:int):
|
69
|
+
""" set the maximum number of selected items that list1 can transfer to list2 """
|
70
|
+
|
71
|
+
assert isinstance(max_selected_items, int), "max_selected_items must be an integer"
|
72
|
+
assert len(self.list1.Items) >= max_selected_items, "len(self.list1.Items) must be >= max_selected_items"
|
73
|
+
self.max_selected_items = max_selected_items
|
74
|
+
|
75
|
+
def _ui_bind_actions(self):
|
76
|
+
""" Bind actions to buttons """
|
77
|
+
self.button1to2.Bind(wx.EVT_BUTTON, self._on_button1to2)
|
78
|
+
self.button2to1.Bind(wx.EVT_BUTTON, self._on_button2to1)
|
79
|
+
self.buttonSort1.Bind(wx.EVT_BUTTON, self._on_buttonSort1)
|
80
|
+
self.buttonSort2.Bind(wx.EVT_BUTTON, self._on_buttonSort2)
|
81
|
+
self.buttonall1to2.Bind(wx.EVT_BUTTON, self._on_buttonAll1to2)
|
82
|
+
self.buttonall2to1.Bind(wx.EVT_BUTTON, self._on_buttonAll2to1)
|
83
|
+
|
84
|
+
def _on_buttonAll1to2(self, event):
|
85
|
+
""" Clear list 2 """
|
86
|
+
for i in range(len(self.list1.Items)):
|
87
|
+
self.list1.Select(i)
|
88
|
+
self._on_button1to2(wx.EVT_BUTTON)
|
89
|
+
|
90
|
+
def _on_buttonAll2to1(self, event):
|
91
|
+
""" Clear list 2 """
|
92
|
+
for i in range(len(self.list2.Items)):
|
93
|
+
self.list2.Select(i)
|
94
|
+
self._on_button2to1(wx.EVT_BUTTON)
|
95
|
+
|
96
|
+
def _on_buttonSort1(self, event):
|
97
|
+
""" Sort items of list 1 """
|
98
|
+
if len(self.list1.Items)==0:
|
99
|
+
return
|
100
|
+
# Récupérer les éléments de la liste 1
|
101
|
+
items = self.list1.Items
|
102
|
+
# Trier les éléments
|
103
|
+
items.sort()
|
104
|
+
# Supprimer les éléments de la liste 1
|
105
|
+
self.list1.Clear()
|
106
|
+
# Ajouter les éléments triés à la liste 1
|
107
|
+
self.list1.InsertItems(items, 0)
|
108
|
+
|
109
|
+
def _on_buttonSort2(self, event):
|
110
|
+
""" Sort items of list 2 """
|
111
|
+
if len(self.list2.Items)==0:
|
112
|
+
return
|
113
|
+
# Récupérer les éléments de la liste 2
|
114
|
+
items = self.list2.Items
|
115
|
+
# Trier les éléments
|
116
|
+
items.sort()
|
117
|
+
# Supprimer les éléments de la liste 2
|
118
|
+
self.list2.Clear()
|
119
|
+
# Ajouter les éléments triés à la liste 2
|
120
|
+
self.list2.InsertItems(items, 0)
|
121
|
+
|
122
|
+
def _on_button1to2(self, event):
|
123
|
+
""" Transfer selected items from list 1 to list 2 """
|
124
|
+
# Récupérer les éléments sélectionnés de la liste 1
|
125
|
+
selected_items = self.list1.GetSelections()
|
126
|
+
if len(selected_items) == 0:
|
127
|
+
return
|
128
|
+
|
129
|
+
if self.max_selected_items is not None:
|
130
|
+
if self.max_selected_items > -1:
|
131
|
+
if len(selected_items) > self.max_selected_items:
|
132
|
+
logging.warning(f"Max selected items is {self.max_selected_items}")
|
133
|
+
return
|
134
|
+
if len(self.list2.Items) + len(selected_items) > self.max_selected_items:
|
135
|
+
logging.warning(f"Max selected items is {self.max_selected_items}")
|
136
|
+
return
|
137
|
+
|
138
|
+
# Ajouter les éléments sélectionnés à la liste 2
|
139
|
+
self.list2.InsertItems([self.list1.GetString(item) for item in selected_items], 0)
|
140
|
+
|
141
|
+
if self.delete_if_transfer:
|
142
|
+
# Supprimer les éléments sélectionnés de la liste 1
|
143
|
+
selected_items.sort(reverse=True)
|
144
|
+
for n in selected_items:
|
145
|
+
self.list1.Delete(n)
|
146
|
+
|
147
|
+
def _on_button2to1(self, event):
|
148
|
+
""" Transfer selected items from list 2 to list 1 """
|
149
|
+
# Récupérer les éléments sélectionnés de la liste 2
|
150
|
+
selected_items = self.list2.GetSelections()
|
151
|
+
if len(selected_items) == 0:
|
152
|
+
return
|
153
|
+
# Ajouter les éléments sélectionnés à la liste 1
|
154
|
+
self.list1.InsertItems([self.list2.GetString(item) for item in selected_items], 0)
|
155
|
+
|
156
|
+
# Supprimer les éléments sélectionnés de la liste 2
|
157
|
+
selected_items.sort(reverse=True)
|
158
|
+
for n in selected_items:
|
159
|
+
self.list2.Delete(n)
|
160
|
+
|
161
|
+
|
162
|
+
class Wolf_MultipleSelection(wx.Dialog):
|
163
|
+
"""
|
164
|
+
Dialog with multiple 'collapsiblepanes' containing 2 lists to select multiple items
|
165
|
+
"""
|
166
|
+
def __init__(self,
|
167
|
+
parent,
|
168
|
+
title,
|
169
|
+
values_dict:dict,
|
170
|
+
callback = None,
|
171
|
+
info:str='',
|
172
|
+
cmdApply:bool=False,
|
173
|
+
styles = wx.LB_EXTENDED,
|
174
|
+
destroyOK = False,
|
175
|
+
**kwargs):
|
176
|
+
"""
|
177
|
+
@param parent : wx.Window
|
178
|
+
@param title : str - title of the frame
|
179
|
+
@param values_dict : dict - {'label1':[item1, item2, ...], 'label2':[item1, item2, ...], ...}
|
180
|
+
@param callback : function - callback function when OK or Apply button is pressed
|
181
|
+
@param info : str - information to display upper the collapsiblepanes
|
182
|
+
@param cmdApply : bool - if True, Apply button is displayed
|
183
|
+
@param styles : wx.ListBox styles - wx constant or list of wx constants
|
184
|
+
@param kwargs : dict - other arguments for wx.Frame (example : max_selected_items=[1, 2, 3], delete_if_transfer=[True, False, True])
|
185
|
+
"""
|
186
|
+
if isinstance(styles, list):
|
187
|
+
assert len(styles) == len(values_dict), "styles must be a list of len(values_dict)"
|
188
|
+
|
189
|
+
if 'max_selected_items' in kwargs:
|
190
|
+
self.max_selected_items = kwargs['max_selected_items']
|
191
|
+
assert isinstance(self.max_selected_items, list), "max_selected_items must be a list"
|
192
|
+
assert len(self.max_selected_items) == len(values_dict), "max_selected_items must be a list of len(values_dict)"
|
193
|
+
for i, values in enumerate(values_dict.values()):
|
194
|
+
assert len(values) >= self.max_selected_items[i], "len(values) must be >= max_selected_items"
|
195
|
+
else:
|
196
|
+
self.max_selected_items = None
|
197
|
+
|
198
|
+
if 'delete_if_transfer' in kwargs:
|
199
|
+
self.delete_if_transfer = kwargs['delete_if_transfer']
|
200
|
+
assert isinstance(self.delete_if_transfer, list), "delete_if_transfer must be a list"
|
201
|
+
assert len(self.delete_if_transfer) == len(values_dict), "delete_if_transfer must be a list of len(values_dict)"
|
202
|
+
for i, values in enumerate(values_dict.values()):
|
203
|
+
assert isinstance(self.delete_if_transfer[i], bool), "delete_if_transfer must be a list of boolean"
|
204
|
+
|
205
|
+
super().__init__(parent, title=title)
|
206
|
+
|
207
|
+
self.destroyOK = destroyOK
|
208
|
+
# Créer le panneau principal
|
209
|
+
main_panel = wx.Panel(self)
|
210
|
+
|
211
|
+
# Créer les collapsiblepanes
|
212
|
+
self.panes = []
|
213
|
+
for key, values in values_dict.items():
|
214
|
+
pane = wx.CollapsiblePane(main_panel, label=key)
|
215
|
+
self.panes.append(pane)
|
216
|
+
|
217
|
+
# Créer les panneaux internes pour les collapsiblepanes
|
218
|
+
pane_panels = [pane.GetPane() for pane in self.panes]
|
219
|
+
|
220
|
+
# Créer l'objet Wolf_TwoLists_Transfer pour chaque panneau interne
|
221
|
+
self.transfers = []
|
222
|
+
for i, values in enumerate(values_dict.values()):
|
223
|
+
transfer = Wolf_TwoLists_Transfer(pane_panels[i])
|
224
|
+
|
225
|
+
if isinstance(styles, list):
|
226
|
+
transfer.list1.SetWindowStyle(styles[i])
|
227
|
+
transfer.list2.SetWindowStyle(styles[i])
|
228
|
+
else:
|
229
|
+
transfer.list1.SetWindowStyle(styles)
|
230
|
+
transfer.list2.SetWindowStyle(styles)
|
231
|
+
|
232
|
+
transfer.list1.Items = values
|
233
|
+
|
234
|
+
if self.max_selected_items is not None:
|
235
|
+
transfer.set_max_selected_items(self.max_selected_items[i])
|
236
|
+
|
237
|
+
if self.delete_if_transfer is not None:
|
238
|
+
transfer.delete_if_transfer = self.delete_if_transfer[i]
|
239
|
+
|
240
|
+
self.transfers.append(transfer)
|
241
|
+
|
242
|
+
# Créer le sizer vertical pour les collapsiblepanes
|
243
|
+
sizer_vertical = wx.BoxSizer(wx.VERTICAL)
|
244
|
+
|
245
|
+
text = wx.StaticText(main_panel, label=info)
|
246
|
+
sizer_vertical.Add(text, proportion=0, flag=wx.GROW | wx.ALL, border=5)
|
247
|
+
|
248
|
+
for i, pane in enumerate(self.panes):
|
249
|
+
sizer_vertical.Add(pane, proportion=0, flag=wx.GROW | wx.ALL, border=5)
|
250
|
+
|
251
|
+
# Créer les boutons OK et Apply
|
252
|
+
sizer_horizontal_buttons = wx.BoxSizer(wx.HORIZONTAL)
|
253
|
+
self.buttonOK = wx.Button(main_panel, label="OK")
|
254
|
+
sizer_horizontal_buttons.Add(self.buttonOK, proportion=0, flag=wx.ALL, border=5)
|
255
|
+
if cmdApply:
|
256
|
+
self.buttonApply = wx.Button(main_panel, label="Apply")
|
257
|
+
sizer_horizontal_buttons.Add(self.buttonApply, proportion=0, flag=wx.ALL, border=5)
|
258
|
+
sizer_vertical.Add(sizer_horizontal_buttons, proportion=0, flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
|
259
|
+
else:
|
260
|
+
self.buttonApply = None
|
261
|
+
sizer_vertical.Add(sizer_horizontal_buttons, proportion=0, flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
|
262
|
+
|
263
|
+
# Callback if ok/apply button is pressed
|
264
|
+
self.callback = callback
|
265
|
+
|
266
|
+
# Définir le sizer pour le panneau principal
|
267
|
+
main_panel.SetSizer(sizer_vertical)
|
268
|
+
|
269
|
+
# Définir le sizer pour la frame
|
270
|
+
self.SetSizer(wx.BoxSizer(wx.VERTICAL)) # Use SetSizerAndFit instead of SetSizer
|
271
|
+
|
272
|
+
# Ajouter le panneau principal à la frame
|
273
|
+
self.GetSizer().Add(main_panel, proportion=0, flag=wx.EXPAND)
|
274
|
+
|
275
|
+
# Définir la taille de la frame
|
276
|
+
self.Fit()
|
277
|
+
|
278
|
+
# Mise en page des éléments de la frame
|
279
|
+
sizer_vertical.SetSizeHints(self)
|
280
|
+
|
281
|
+
self.Layout()
|
282
|
+
|
283
|
+
self._ui_bind_actions()
|
284
|
+
# Afficher la frame
|
285
|
+
self.CenterOnScreen()
|
286
|
+
|
287
|
+
# def MakeModal(self, modal=True):
|
288
|
+
# if modal and not hasattr(self, '_disabler'):
|
289
|
+
# self._disabler = wx.WindowDisabler(self)
|
290
|
+
# if not modal and hasattr(self, '_disabler'):
|
291
|
+
# del self._disabler
|
292
|
+
|
293
|
+
# def ShowModal(self):
|
294
|
+
# """ Show the frame """
|
295
|
+
# self.Show()
|
296
|
+
# return self
|
297
|
+
|
298
|
+
# def Show(self):
|
299
|
+
# """ Show the frame """
|
300
|
+
# super().Show()
|
301
|
+
# return self
|
302
|
+
|
303
|
+
def get_values(self):
|
304
|
+
""" Get values of the lists """
|
305
|
+
keys = [curpane.GetLabel() for curpane in self.panes]
|
306
|
+
return {key: transfer.get_values() for key, transfer in zip(keys, self.transfers)}
|
307
|
+
|
308
|
+
def _ui_bind_actions(self):
|
309
|
+
""" Bind actions to buttons """
|
310
|
+
|
311
|
+
self.buttonOK.Bind(wx.EVT_BUTTON, self._on_buttonOK)
|
312
|
+
|
313
|
+
if self.buttonApply is not None:
|
314
|
+
self.buttonApply.Bind(wx.EVT_BUTTON, self._on_buttonApply)
|
315
|
+
|
316
|
+
def _on_buttonOK(self, event):
|
317
|
+
if self.callback is not None:
|
318
|
+
self.callback(self)
|
319
|
+
|
320
|
+
if self.destroyOK:
|
321
|
+
self.Destroy()
|
322
|
+
else:
|
323
|
+
self.Hide()
|
324
|
+
|
325
|
+
def _on_buttonApply(self, event):
|
326
|
+
""" callback """
|
327
|
+
if self.buttonApply is None:
|
328
|
+
return
|
329
|
+
if self.callback is not None:
|
330
|
+
self.callback(self)
|
331
|
+
|
332
|
+
if __name__ == "__main__":
|
333
|
+
# Utilisation de la classe Wolf_MultipleSelection
|
334
|
+
app = wx.App()
|
335
|
+
frame = Wolf_MultipleSelection(None,
|
336
|
+
title="Exemple de Wolf_MultipleSelection",
|
337
|
+
values_dict={'domain':["Item 1", "Item 2", "Item 3", "Item 4"],
|
338
|
+
'u':["Item 3", "Item 4", "Item 5", "Item 6"],
|
339
|
+
'v':["Item v1", "Item v2", "Item v3", "Item v4"]},
|
340
|
+
info="You can define : \n - the domain\n - u\n -v",
|
341
|
+
callback=None,
|
342
|
+
styles=[wx.LB_SINGLE, wx.LB_EXTENDED, wx.LB_EXTENDED],
|
343
|
+
max_selected_items=[1, -1, -1],)
|
344
|
+
frame.ShowModal()
|
345
|
+
pass
|
346
|
+
app.MainLoop()
|
@@ -1,17 +1,15 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: wolfhece
|
3
|
-
Version: 2.0.
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
Classifier:
|
10
|
-
Classifier:
|
11
|
-
Classifier: Operating System :: OS Independent
|
3
|
+
Version: 2.0.4
|
4
|
+
Author-email: Stéphane Champailler <stephane.champailler@uliege.be>, Pierre Archambeau <pierre.archambeau@uliege.be>
|
5
|
+
Project-URL: Homepage, https://uee.uliege.be/hece
|
6
|
+
Project-URL: Issues, https://uee.uliege.be/hece
|
7
|
+
Classifier: Programming Language :: Python :: 3.9
|
8
|
+
Classifier: Operating System :: Microsoft :: Windows :: Windows 10
|
9
|
+
Classifier: Operating System :: Microsoft :: Windows :: Windows 11
|
10
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
12
11
|
Requires-Python: <3.11,>=3.9
|
13
12
|
Description-Content-Type: text/markdown
|
14
|
-
License-File: LICENCE
|
15
13
|
Requires-Dist: wxpython
|
16
14
|
Requires-Dist: numpy
|
17
15
|
Requires-Dist: pyopengl
|
@@ -48,6 +46,7 @@ Requires-Dist: osmnx
|
|
48
46
|
Requires-Dist: tifffile
|
49
47
|
Requires-Dist: numba
|
50
48
|
Requires-Dist: xmltodict
|
49
|
+
Requires-Dist: opencv-python
|
51
50
|
|
52
51
|
Ce paquet contient l'interface graphique Python du logiciel WOLF (HECE - ULiège) de même que plusieurs outils de traitements topographique, hydraulique et hydrologique.
|
53
52
|
|