mg-pso-gui 0.2.81__tar.gz → 0.2.83__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/PKG-INFO +1 -1
  2. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mg_pso_gui.egg-info/PKG-INFO +1 -1
  3. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mg_pso_gui.egg-info/SOURCES.txt +3 -0
  4. mg_pso_gui-0.2.83/mgpsogui/gui/General/NoticeWindow.py +53 -0
  5. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/HomePage.py +4 -0
  6. mg_pso_gui-0.2.83/mgpsogui/gui/SetupTab/SamplingListView.py +127 -0
  7. mg_pso_gui-0.2.83/mgpsogui/gui/SetupTab/SamplingNameListWindow.py +74 -0
  8. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/setup.py +1 -1
  9. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mg_pso_gui.egg-info/dependency_links.txt +0 -0
  10. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mg_pso_gui.egg-info/entry_points.txt +0 -0
  11. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mg_pso_gui.egg-info/requires.txt +0 -0
  12. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mg_pso_gui.egg-info/top_level.txt +0 -0
  13. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/__init__.py +0 -0
  14. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/General/ParameterView.py +0 -0
  15. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/General/__init__.py +0 -0
  16. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/OptionManager.py +0 -0
  17. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/OptionManager_backup.py +0 -0
  18. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/PlatformTab/PlatformTab.py +0 -0
  19. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/PlatformTab/__init__.py +0 -0
  20. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/RunTab/OptimalParameterView.py +0 -0
  21. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/RunTab/RunTab.py +0 -0
  22. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/RunTab/__init__.py +0 -0
  23. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/SetupTab/BoundsEditorWindow.py +0 -0
  24. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/SetupTab/BoundsList.py +0 -0
  25. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/SetupTab/CustomFunctionEditorWindow.py +0 -0
  26. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/SetupTab/CustomFunctionMetrics.py +0 -0
  27. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/SetupTab/FunctionsList.py +0 -0
  28. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/SetupTab/ListEditor.py +0 -0
  29. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/SetupTab/ListParametersView.py +0 -0
  30. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/SetupTab/OverrideParameterMetrics.py +0 -0
  31. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/SetupTab/OverrideParameterWindow.py +0 -0
  32. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/SetupTab/SetupTab.py +0 -0
  33. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/SetupTab/StepView.py +0 -0
  34. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/SetupTab/__init__.py +0 -0
  35. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/VisualizeTab/MatrixEditor.py +0 -0
  36. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/VisualizeTab/SideBar.py +0 -0
  37. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/VisualizeTab/VisualizeTab.py +0 -0
  38. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/VisualizeTab/__init__.py +0 -0
  39. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/__init__.py +0 -0
  40. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/defaults/__init__.py +0 -0
  41. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/defaults/optimization.json +0 -0
  42. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/defaults/sampling.json +0 -0
  43. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/defaults/sensitivity.json +0 -0
  44. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/images/collapse.png +0 -0
  45. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/images/down.png +0 -0
  46. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/images/expand.png +0 -0
  47. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/images/play.png +0 -0
  48. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/images/plus.png +0 -0
  49. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/images/refresh.png +0 -0
  50. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/images/refresh_hd.png +0 -0
  51. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/images/stop.png +0 -0
  52. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/images/test.png +0 -0
  53. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/images/trash.png +0 -0
  54. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/gui/images/up.png +0 -0
  55. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/mgpsogui.py +0 -0
  56. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/start.yaml +0 -0
  57. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/CTkToolTip/__init__.py +0 -0
  58. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/CTkToolTip/ctk_tooltip.py +0 -0
  59. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/GraphGenerator.py +0 -0
  60. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/PSORunner.py +0 -0
  61. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/__init__.py +0 -0
  62. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/debug.py +0 -0
  63. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/helpers.py +0 -0
  64. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/__init__.py +0 -0
  65. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/pso/__init__.py +0 -0
  66. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/pso/csip_access.py +0 -0
  67. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/pso/pso.py +0 -0
  68. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/sampling/__init__.py +0 -0
  69. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/sampling/halton/__init__.py +0 -0
  70. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/sampling/halton/halton.py +0 -0
  71. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/sampling/halton/prime.py +0 -0
  72. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/sampling/random/__init__.py +0 -0
  73. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/sampling/random/random_sampler.py +0 -0
  74. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/sampling/sample_trace_writer.py +0 -0
  75. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/sampling/sampler_task.py +0 -0
  76. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/sampling/sampling.py +0 -0
  77. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/utils/__init__.py +0 -0
  78. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/utils/plot/__init__.py +0 -0
  79. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/utils/plot/cost_steps.py +0 -0
  80. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/utils/trace_writer.py +0 -0
  81. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/recosu/utils/utils.py +0 -0
  82. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/mgpsogui/util/sampler_test_driver.py +0 -0
  83. {mg_pso_gui-0.2.81 → mg_pso_gui-0.2.83}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mg-pso-gui
3
- Version: 0.2.81
3
+ Version: 0.2.83
4
4
  Summary: GUI for MG-PSO
5
5
  Author: Robert Cordingly
6
6
  Author-email: <rcording@uw.ed>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mg-pso-gui
3
- Version: 0.2.81
3
+ Version: 0.2.83
4
4
  Summary: GUI for MG-PSO
5
5
  Author: Robert Cordingly
6
6
  Author-email: <rcording@uw.ed>
@@ -12,6 +12,7 @@ mgpsogui/gui/HomePage.py
12
12
  mgpsogui/gui/OptionManager.py
13
13
  mgpsogui/gui/OptionManager_backup.py
14
14
  mgpsogui/gui/__init__.py
15
+ mgpsogui/gui/General/NoticeWindow.py
15
16
  mgpsogui/gui/General/ParameterView.py
16
17
  mgpsogui/gui/General/__init__.py
17
18
  mgpsogui/gui/PlatformTab/PlatformTab.py
@@ -28,6 +29,8 @@ mgpsogui/gui/SetupTab/ListEditor.py
28
29
  mgpsogui/gui/SetupTab/ListParametersView.py
29
30
  mgpsogui/gui/SetupTab/OverrideParameterMetrics.py
30
31
  mgpsogui/gui/SetupTab/OverrideParameterWindow.py
32
+ mgpsogui/gui/SetupTab/SamplingListView.py
33
+ mgpsogui/gui/SetupTab/SamplingNameListWindow.py
31
34
  mgpsogui/gui/SetupTab/SetupTab.py
32
35
  mgpsogui/gui/SetupTab/StepView.py
33
36
  mgpsogui/gui/SetupTab/__init__.py
@@ -0,0 +1,53 @@
1
+ from typing import Union, Tuple, Optional
2
+
3
+ from customtkinter import CTkLabel
4
+ from customtkinter import CTkButton
5
+ from customtkinter import CTkEntry
6
+ from customtkinter import CTkInputDialog
7
+ from customtkinter import CTkTextbox
8
+
9
+ class NoticeWindow(CTkInputDialog):
10
+ """
11
+ Dialog with extra window, message, entry widget, cancel and ok button.
12
+ For detailed information check out the documentation.
13
+ """
14
+
15
+ def __init__(self, *args,
16
+ message: None,
17
+ **kwargs):
18
+ super().__init__(*args, **kwargs)
19
+
20
+ self.geometry("400x800")
21
+
22
+ self.message = message
23
+
24
+ def _create_widgets(self):
25
+
26
+ self.grid_columnconfigure(0, weight=1)
27
+ self.rowconfigure(0, weight=1)
28
+
29
+ self.textbox = CTkTextbox(self, state="disabled")
30
+ self.textbox.grid(row=0, column=0, padx=(20, 20), pady=(20, 20), sticky="nsew")
31
+ self.textbox.insert("0.0", self.message)
32
+
33
+ self._ok_button = CTkButton(master=self,
34
+ width=100,
35
+ border_width=0,
36
+ fg_color=self._button_fg_color,
37
+ hover_color=self._button_hover_color,
38
+ text_color=self._button_text_color,
39
+ text='OK',
40
+ command=self._ok_event)
41
+ self._ok_button.grid(row=1, column=0, columnspan=1, padx=(20, 10), pady=(0, 20), sticky="ew")
42
+
43
+ def _ok_event(self, event=None):
44
+ self.grab_release()
45
+ self.destroy()
46
+
47
+ def _on_closing(self):
48
+ self.grab_release()
49
+ self.destroy()
50
+
51
+ def _cancel_event(self):
52
+ self.grab_release()
53
+ self.destroy()
@@ -30,6 +30,8 @@ import time
30
30
 
31
31
  from queue import Empty
32
32
 
33
+ from .General.NoticeWindow import NoticeWindow as NW
34
+
33
35
  from ..util import PSORunner
34
36
  from ..util import GraphGenerator
35
37
  from ..util.CTkToolTip import CTkToolTip as ctt
@@ -208,6 +210,8 @@ class App(customtkinter.CTk):
208
210
  self.refresh_step_view(0)
209
211
  self.after(1000, self.running_loop)
210
212
 
213
+ NW(title="Welcome!", message="Welcome to COSU Manager!", option_manager=self.option_manager)
214
+
211
215
  def update_graph(self, value):
212
216
  self.vis_sidebar.refresh()
213
217
  GraphGenerator.generate_graphs(self)
@@ -0,0 +1,127 @@
1
+ from customtkinter import CTkScrollableFrame
2
+ from customtkinter import CTkFrame
3
+ from customtkinter import CTkLabel
4
+ from customtkinter import CTkButton
5
+ from customtkinter import CTkEntry
6
+ import tkinter as tk
7
+ import subprocess
8
+ import platform
9
+ import os
10
+
11
+ global option_manager
12
+
13
+ class SamplingListView(CTkScrollableFrame):
14
+ def __init__(self, *args,
15
+ option_manager: None,
16
+ step_index: 0,
17
+ bound_index: 0,
18
+ **kwargs):
19
+ super().__init__(*args, **kwargs)
20
+
21
+ self.option_manager = option_manager
22
+ self.step_index = step_index
23
+ self.bounds_index = bound_index
24
+ self.key_values = []
25
+ self.visual_name = tk.StringVar()
26
+ self.visual_name.set("name")
27
+
28
+
29
+ self.name = self.option_manager.get_steps()[self.step_index]["parameter_objects"][bound_index]["name"].get()
30
+ self.default = self.option_manager.get_steps()[self.step_index]["parameter_objects"][bound_index]["default_value"].get()
31
+ try:
32
+ if self.name != "" and self.default != "":
33
+
34
+ self.visual_name.set(self.name.rsplit('/', 1)[0] + '/')
35
+ self.names = self.name.split('/')
36
+ self.rows = self.names[-1].split(';')
37
+ self.defaults = self.default.replace("[", "").replace("]", "").replace("(", "").replace(")", "").replace(" ", "").split(",")
38
+
39
+ print("rows", self.rows)
40
+ print("defaults", self.defaults)
41
+ index = 0
42
+
43
+ for name in self.rows:
44
+ obj = {"name": tk.StringVar(), "value": tk.StringVar()}
45
+ obj['name'].set(name)
46
+ obj['value'].set(self.defaults[index])
47
+ self.key_values.append(obj)
48
+ index += 1
49
+ except Exception as e:
50
+ print(e)
51
+
52
+ if (len(self.key_values) == 0):
53
+ self.add_key()
54
+
55
+ self.edit_mode = False
56
+
57
+ self.render()
58
+
59
+ def clear(self):
60
+ self.containerFrame.destroy()
61
+
62
+ def toggle_edit_mode(self):
63
+ self.clear()
64
+ self.edit_mode = not self.edit_mode
65
+ self.render()
66
+
67
+ def add_key(self, key="0000", value="0"):
68
+ obj = {"name": tk.StringVar(), "value": tk.StringVar()}
69
+ obj['name'].set(key)
70
+ obj['value'].set(value)
71
+ self.key_values.append(obj)
72
+
73
+ def remove_key(self, index):
74
+ self.key_values.pop(index)
75
+
76
+ def render(self):
77
+ row = 0
78
+ index = 0
79
+
80
+ self.containerFrame = CTkFrame(self)
81
+ self.containerFrame.grid(row=0, column=0, padx=(5, 5), pady=(5, 5), sticky="nsew")
82
+ self.containerFrame.grid_columnconfigure((0, 1), weight=1)
83
+
84
+
85
+ CTkLabel(self.containerFrame, text="Row:").grid(row=row, column=0, columnspan=1, padx=5, pady=5, sticky="")
86
+ CTkLabel(self.containerFrame, text="Default:").grid(row=row, column=1, columnspan=1, padx=5, pady=5, sticky="")
87
+ row += 1
88
+
89
+ for key_value_pair in self.key_values:
90
+ CTkEntry(self.containerFrame, textvariable=self.key_values[index]["name"]).grid(row=row, column=0, padx=(5, 5), pady=(5, 5), sticky="ew")
91
+
92
+ if self.edit_mode:
93
+ return_func = lambda index=index: (self.clear(), self.remove_key(index), self.render())
94
+ CTkButton(self.containerFrame, text="Remove", command=return_func).grid(row=row, column=1, padx=(5, 5), pady=(5, 5), sticky="ew")
95
+ else:
96
+ bb = CTkEntry(self.containerFrame)
97
+ bb.grid(row=row, column=1, padx=(5, 5), pady=(5, 5), sticky="ew")
98
+ bb.configure(textvariable=self.key_values[index]["value"])
99
+ row += 1
100
+ index += 1
101
+
102
+ if self.edit_mode:
103
+ CTkButton(self.containerFrame, text="Exit", command=self.toggle_edit_mode).grid(row=row, column=0, padx=(5, 5), pady=(5, 5), sticky="ew")
104
+ else:
105
+ CTkButton(self.containerFrame, text="Edit", command=self.toggle_edit_mode).grid(row=row, column=0, padx=(5, 5), pady=(5, 5), sticky="ew")
106
+
107
+ add_key_func = lambda: (self.clear(), self.add_key(), self.render())
108
+ CTkButton(self.containerFrame, text="Add", command=add_key_func).grid(row=row, column=1, padx=(5, 5), pady=(5, 5), sticky="ew")
109
+
110
+ row += 1
111
+
112
+ def push_to_option_manager(self):
113
+ visual_name = self.visual_name.get()
114
+ default_values = "["
115
+ first = True
116
+ for key_value_pair in self.key_values:
117
+ if first:
118
+ visual_name += key_value_pair['name'].get()
119
+ first = False
120
+ else:
121
+ visual_name += ";" + key_value_pair['name'].get()
122
+ default_values += key_value_pair['value'].get() + ","
123
+
124
+ default_values = default_values[:-1] + "]"
125
+
126
+ self.option_manager.get_steps()[self.step_index]["parameter_objects"][self.bounds_index]["name"].set(visual_name)
127
+ self.option_manager.get_steps()[self.step_index]["parameter_objects"][self.bounds_index]["default_value"].set(default_values)
@@ -0,0 +1,74 @@
1
+ from typing import Union, Tuple, Optional
2
+
3
+ from customtkinter import CTkLabel
4
+ from customtkinter import CTkButton
5
+ from customtkinter import CTkEntry
6
+ from customtkinter import CTkInputDialog
7
+ from .SamplingListView import SamplingListView as SamplingListView
8
+
9
+ class SamplingNameListWindow(CTkInputDialog):
10
+ """
11
+ Dialog with extra window, message, entry widget, cancel and ok button.
12
+ For detailed information check out the documentation.
13
+ """
14
+
15
+ def __init__(self, *args,
16
+ step_index: 0,
17
+ bound_index: 0,
18
+ option_manager: None,
19
+ **kwargs):
20
+ super().__init__(*args, **kwargs)
21
+
22
+ self.geometry("400x800")
23
+
24
+ self.step_index = step_index
25
+ self.bound_index = bound_index
26
+ self.option_manager = option_manager
27
+ self.bounds = None
28
+
29
+ def _create_widgets(self):
30
+
31
+ self.grid_columnconfigure((0, 1), weight=1)
32
+ self.rowconfigure(0, weight=1)
33
+
34
+ self.bounds = SamplingListView(
35
+ self, step_index=self.step_index, bound_index=self.bound_index, option_manager=self.option_manager)
36
+ self.bounds.grid(row=0, column=0, columnspan=2, padx=(10, 10),
37
+ pady=(10, 10), sticky="nsew")
38
+ self.bounds.grid_columnconfigure(0, weight=1)
39
+
40
+ self._ok_button = CTkButton(master=self,
41
+ width=100,
42
+ border_width=0,
43
+ fg_color=self._button_fg_color,
44
+ hover_color=self._button_hover_color,
45
+ text_color=self._button_text_color,
46
+ text='Save',
47
+ command=self._ok_event)
48
+ self._ok_button.grid(row=2, column=0, columnspan=1, padx=(20, 10), pady=(0, 20), sticky="ew")
49
+
50
+ self._cancel_button = CTkButton(master=self,
51
+ width=100,
52
+ border_width=0,
53
+ fg_color=self._button_fg_color,
54
+ hover_color=self._button_hover_color,
55
+ text_color=self._button_text_color,
56
+ text='Cancel',
57
+ command=self._cancel_event)
58
+ self._cancel_button.grid(row=2, column=1, columnspan=1, padx=(10, 20), pady=(0, 20), sticky="ew")
59
+
60
+ def _ok_event(self, event=None):
61
+ # Save values in bounds editor...
62
+
63
+ self.bounds.push_to_option_manager()
64
+
65
+ self.grab_release()
66
+ self.destroy()
67
+
68
+ def _on_closing(self):
69
+ self.grab_release()
70
+ self.destroy()
71
+
72
+ def _cancel_event(self):
73
+ self.grab_release()
74
+ self.destroy()
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
  import codecs
3
3
  import os
4
4
 
5
- VERSION = '0.2.81'
5
+ VERSION = '0.2.83'
6
6
  DESCRIPTION = 'GUI for MG-PSO'
7
7
  LONG_DESCRIPTION = open('../README.md').read()
8
8
 
File without changes