mg-pso-gui 0.2.50__tar.gz → 0.2.52__tar.gz

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.
Files changed (81) hide show
  1. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/PKG-INFO +1 -1
  2. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mg_pso_gui.egg-info/PKG-INFO +1 -1
  3. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/HomePage.py +1 -1
  4. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/OptionManager.py +3 -0
  5. mg_pso_gui-0.2.52/mgpsogui/gui/RunTab/RunTab.py +108 -0
  6. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/SetupTab/SetupTab.py +4 -5
  7. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/setup.py +1 -1
  8. mg_pso_gui-0.2.50/mgpsogui/gui/RunTab/RunTab.py +0 -42
  9. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mg_pso_gui.egg-info/SOURCES.txt +0 -0
  10. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mg_pso_gui.egg-info/dependency_links.txt +0 -0
  11. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mg_pso_gui.egg-info/entry_points.txt +0 -0
  12. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mg_pso_gui.egg-info/requires.txt +0 -0
  13. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mg_pso_gui.egg-info/top_level.txt +0 -0
  14. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/__init__.py +0 -0
  15. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/General/ParameterView.py +0 -0
  16. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/General/__init__.py +0 -0
  17. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/OptionManager_backup.py +0 -0
  18. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/PlatformTab/PlatformTab.py +0 -0
  19. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/PlatformTab/__init__.py +0 -0
  20. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/RunTab/__init__.py +0 -0
  21. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/SetupTab/BoundsEditorWindow.py +0 -0
  22. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/SetupTab/BoundsList.py +0 -0
  23. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/SetupTab/CustomFunctionEditorWindow.py +0 -0
  24. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/SetupTab/CustomFunctionMetrics.py +0 -0
  25. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/SetupTab/FunctionsList.py +0 -0
  26. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/SetupTab/ListEditor.py +0 -0
  27. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/SetupTab/ListParametersView.py +0 -0
  28. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/SetupTab/OptimalParameterView.py +0 -0
  29. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/SetupTab/OverrideParameterMetrics.py +0 -0
  30. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/SetupTab/OverrideParameterWindow.py +0 -0
  31. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/SetupTab/StepView.py +0 -0
  32. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/SetupTab/__init__.py +0 -0
  33. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/VisualizeTab/MatrixEditor.py +0 -0
  34. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/VisualizeTab/SideBar.py +0 -0
  35. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/VisualizeTab/VisualizeTab.py +0 -0
  36. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/VisualizeTab/__init__.py +0 -0
  37. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/__init__.py +0 -0
  38. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/defaults/__init__.py +0 -0
  39. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/defaults/optimization.json +0 -0
  40. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/defaults/sampling.json +0 -0
  41. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/defaults/sensitivity.json +0 -0
  42. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/images/collapse.png +0 -0
  43. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/images/down.png +0 -0
  44. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/images/expand.png +0 -0
  45. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/images/play.png +0 -0
  46. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/images/plus.png +0 -0
  47. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/images/refresh.png +0 -0
  48. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/images/refresh_hd.png +0 -0
  49. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/images/stop.png +0 -0
  50. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/images/test.png +0 -0
  51. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/images/trash.png +0 -0
  52. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/gui/images/up.png +0 -0
  53. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/mgpsogui.py +0 -0
  54. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/start.yaml +0 -0
  55. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/CTkToolTip/__init__.py +0 -0
  56. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/CTkToolTip/ctk_tooltip.py +0 -0
  57. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/GraphGenerator.py +0 -0
  58. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/PSORunner.py +0 -0
  59. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/__init__.py +0 -0
  60. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/debug.py +0 -0
  61. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/helpers.py +0 -0
  62. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/__init__.py +0 -0
  63. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/pso/__init__.py +0 -0
  64. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/pso/csip_access.py +0 -0
  65. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/pso/pso.py +0 -0
  66. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/sampling/__init__.py +0 -0
  67. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/sampling/halton/__init__.py +0 -0
  68. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/sampling/halton/halton.py +0 -0
  69. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/sampling/halton/prime.py +0 -0
  70. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/sampling/random/__init__.py +0 -0
  71. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/sampling/random/random_sampler.py +0 -0
  72. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/sampling/sample_trace_writer.py +0 -0
  73. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/sampling/sampler_task.py +0 -0
  74. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/sampling/sampling.py +0 -0
  75. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/utils/__init__.py +0 -0
  76. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/utils/plot/__init__.py +0 -0
  77. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/utils/plot/cost_steps.py +0 -0
  78. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/utils/trace_writer.py +0 -0
  79. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/recosu/utils/utils.py +0 -0
  80. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/mgpsogui/util/sampler_test_driver.py +0 -0
  81. {mg_pso_gui-0.2.50 → mg_pso_gui-0.2.52}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mg-pso-gui
3
- Version: 0.2.50
3
+ Version: 0.2.52
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.50
3
+ Version: 0.2.52
4
4
  Summary: GUI for MG-PSO
5
5
  Author: Robert Cordingly
6
6
  Author-email: <rcording@uw.ed>
@@ -161,7 +161,7 @@ class App(customtkinter.CTk):
161
161
  self.tabview.grid(row=1, column=0, padx=(0, 0), pady=(10, 10), sticky="nsew")
162
162
  tab1 = "Platform"
163
163
  tab2 = "Setup"
164
- tab3 = "Logs"
164
+ tab3 = "Project"
165
165
  tab4 = "Results"
166
166
 
167
167
  self.tabview.add(tab1)
@@ -371,6 +371,9 @@ class OptionManager():
371
371
  path = filename.replace(file_name + ".json", "")
372
372
  self._project_data["path"] = path
373
373
  self._project_data["name"] = file_name
374
+
375
+ def copy_list(self, source_mode):
376
+ self._data[self._mode_sv.get()] = self._data[source_mode]
374
377
 
375
378
  def get_data(self):
376
379
  return self._data[self._mode_sv.get()]
@@ -0,0 +1,108 @@
1
+
2
+ import customtkinter
3
+ import json
4
+ import os
5
+ from multiprocessing import Process
6
+ import traceback
7
+ import re
8
+ import ast
9
+ import pandas as pd
10
+ import numpy as np
11
+ import os
12
+ import platform
13
+ import subprocess
14
+
15
+ from ...util import PSORunner
16
+ from ...util import GraphGenerator
17
+ from ...util.CTkToolTip import CTkToolTip as ctt
18
+ import customtkinter
19
+
20
+ from . import OptimalParameterView as opv
21
+
22
+ def create_tab(self, tab):
23
+
24
+ # URL
25
+ tab.grid_columnconfigure(0, weight=1)
26
+ tab.grid_columnconfigure(1, weight=5)
27
+ tab.grid_columnconfigure(2, weight=5)
28
+ tab.grid_rowconfigure(0, weight=1)
29
+ tab.grid_rowconfigure(1, weight=200)
30
+
31
+ #self.progress_container = customtkinter.CTkFrame(tab)
32
+ #self.progress_container.grid_columnconfigure(0, weight=1)
33
+ #self.progress_container.grid_columnconfigure(1, weight=1)
34
+ #self.progress_container.grid_columnconfigure(2, weight=1)
35
+ #self.progress_container.grid(row=0, column=0, padx=(20, 20), pady=(20, 20), sticky="nsew")
36
+
37
+ # Add progress bar to progress container
38
+ #self.progress_message_left = customtkinter.CTkLabel(self.progress_container, text="")
39
+ #self.progress_message_left.grid(row=0, column=0, padx=(10, 10), pady=(10, 10), sticky="w")
40
+
41
+ #self.progress_message_middle = customtkinter.CTkLabel(self.progress_container, text="Calibration not running...")
42
+ #self.progress_message_middle.grid(row=0, column=1, padx=(10, 10), pady=(10, 10), sticky="ew")
43
+
44
+ #self.progress_message_right = customtkinter.CTkLabel(self.progress_container, text="")
45
+ #self.progress_message_right.grid(row=0, column=2, padx=(10, 10), pady=(10, 10), sticky="e")
46
+
47
+ self.optimal_param_frame = opv.OptimalParameterView(tab, option_manager=self.option_manager)
48
+ self.optimal_param_frame.grid(row=0, column=0, padx=(10, 10), pady=(10, 0), sticky="nsew")
49
+ self.optimal_param_frame.grid_columnconfigure(0, weight=1)
50
+ self.optimal_param_frame.grid_rowconfigure(0, weight=1)
51
+
52
+ self.textbox = customtkinter.CTkTextbox(tab)
53
+ self.textbox.grid(row=0, column=1, padx=(20, 20), pady=(20, 20), sticky="nsew")
54
+ self.textbox.insert("0.0", "Welcome to the CSIP PSO Calibration Tool!\n\nUse the Setup tab to define steps and calibration parameters. Use this tab to view logs and manage your Project. Once finished, use the Results tab to generate figures and graphs.")
55
+
56
+ self.project_editor = customtkinter.CTkScrollableFrame(tab, label_text="Project Editor")
57
+ self.project_editor.grid(row=0, column=2, padx=(20, 20), pady=(20, 20), sticky="nsew")
58
+ self.project_editor.grid_columnconfigure(0, weight=1)
59
+ self.project_editor.grid_rowconfigure(0, weight=1)
60
+
61
+ customtkinter.CTkLabel(self.project_editor, text="Copy Data to Current Mode:").grid(row=0, column=0, padx=(20, 20), pady=(5, 10), sticky="ew")
62
+
63
+ def copy_sense():
64
+ self.option_manager.copy_list("Sensitivity Analysis")
65
+ self.refresh_step_view(0)
66
+
67
+ def copy_halton():
68
+ self.option_manager.copy_list("Sampling: Halton")
69
+ self.refresh_step_view(0)
70
+
71
+ def copy_random():
72
+ self.option_manager.copy_list("Sampling: Random")
73
+ self.refresh_step_view(0)
74
+
75
+ def copy_optim():
76
+ self.option_manager.copy_list("Optimization")
77
+ self.refresh_step_view(0)
78
+
79
+ def open_project_folder():
80
+ # Open the file in the default program
81
+ folder = self.option_manager.get_project_folder()
82
+
83
+ if not os.path.exists(folder):
84
+ os.makedirs(folder)
85
+
86
+ if platform.system() == "Windows":
87
+ os.startfile(folder)
88
+ elif platform.system() == "Darwin":
89
+ subprocess.Popen(["open", folder])
90
+ else:
91
+ subprocess.Popen(["xdg-open", folder])
92
+
93
+ self.analysis_copy = customtkinter.CTkButton(self.project_editor, text="From Sensitivity Analysis", command=copy_sense)
94
+ self.analysis_copy.grid(row=1, column=0, padx=(20, 20), pady=(5, 10), sticky="ew")
95
+
96
+ self.halton_copy = customtkinter.CTkButton(self.project_editor, text="From Sampling: Halton", command=copy_halton)
97
+ self.halton_copy.grid(row=2, column=0, padx=(20, 20), pady=(5, 10), sticky="ew")
98
+
99
+ self.random_copy = customtkinter.CTkButton(self.project_editor, text="From Sampling: Random", command=copy_random)
100
+ self.random_copy.grid(row=3, column=0, padx=(20, 20), pady=(5, 10), sticky="ew")
101
+
102
+ self.optimization_copy = customtkinter.CTkButton(self.project_editor, text="From Optimization", command=copy_optim)
103
+ self.optimization_copy.grid(row=4, column=0, padx=(20, 20), pady=(5, 10), sticky="ew")
104
+
105
+ customtkinter.CTkLabel(self.project_editor, text="Project Management:").grid(row=5, column=0, padx=(20, 20), pady=(5, 10), sticky="ew")
106
+
107
+ self.open_folder = customtkinter.CTkButton(self.project_editor, text="Open Project Folder", command=open_project_folder)
108
+ self.open_folder.grid(row=4, column=0, padx=(20, 20), pady=(5, 10), sticky="ew")
@@ -1,7 +1,6 @@
1
1
 
2
2
 
3
3
  from . import StepView as sv
4
- from . import OptimalParameterView as opv
5
4
  from ..General import ParameterView as pv
6
5
 
7
6
  import customtkinter
@@ -24,7 +23,7 @@ def create_tab(self, tab):
24
23
  tab.grid_rowconfigure(0, weight=1)
25
24
 
26
25
  self.paramtabview = customtkinter.CTkTabview(tab, bg_color="transparent", fg_color="transparent")
27
- self.paramtabview.grid(row=0, column=1, padx=(0, 0), pady=(10, 0), sticky="nsew")
26
+ self.paramtabview.grid(row=0, column=1, padx=(0, 0), pady=(0, 0), sticky="nsew")
28
27
 
29
28
  tab1 = "Model Parameters"
30
29
  tab2 = "Hyperparameters"
@@ -43,12 +42,12 @@ def create_tab(self, tab):
43
42
  #self.paramtabview.tab(tab3).grid_rowconfigure(0, weight=1)
44
43
 
45
44
  self.static_param_frame = pv.ParameterView(self.paramtabview.tab(tab1), option_manager=self.option_manager, list_name="model_parameters")
46
- self.static_param_frame.grid(row=0, column=0, padx=(10, 10), pady=(10, 0), sticky="nsew")
45
+ self.static_param_frame.grid(row=0, column=0, padx=(5, 10), pady=(10, 0), sticky="nsew")
47
46
  self.static_param_frame.grid_columnconfigure(0, weight=1)
48
47
  self.static_param_frame.grid_rowconfigure(0, weight=1)
49
48
 
50
49
  self.calib_param_frame = pv.ParameterView(self.paramtabview.tab(tab2), option_manager=self.option_manager, list_name="hyperparameters")
51
- self.calib_param_frame.grid(row=0, column=0, padx=(10, 10), pady=(10, 0), sticky="nsew")
50
+ self.calib_param_frame.grid(row=0, column=0, padx=(5, 10), pady=(10, 0), sticky="nsew")
52
51
  self.calib_param_frame.grid_columnconfigure(0, weight=1)
53
52
  self.calib_param_frame.grid_rowconfigure(0, weight=1)
54
53
 
@@ -58,7 +57,7 @@ def create_tab(self, tab):
58
57
  #self.optimal_param_frame.grid_rowconfigure(0, weight=1)
59
58
 
60
59
  self.steps_frame = sv.StepView(tab, label_text="Group Editor", option_manager=self.option_manager, home_page=self)
61
- self.steps_frame.grid(row=0, column=0, padx=(10, 10), pady=(10, 0), sticky="nsew")
60
+ self.steps_frame.grid(row=0, column=0, padx=(10, 5), pady=(10, 0), sticky="nsew")
62
61
  self.steps_frame.grid_columnconfigure(0, weight=1)
63
62
  self.steps_frame.grid_rowconfigure(0, weight=1)
64
63
 
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
  import codecs
3
3
  import os
4
4
 
5
- VERSION = '0.2.50'
5
+ VERSION = '0.2.52'
6
6
  DESCRIPTION = 'GUI for MG-PSO'
7
7
  LONG_DESCRIPTION = open('../README.md').read()
8
8
 
@@ -1,42 +0,0 @@
1
-
2
- import customtkinter
3
- import json
4
- import os
5
- from multiprocessing import Process
6
- import traceback
7
- import re
8
- import ast
9
- import pandas as pd
10
- import numpy as np
11
-
12
- from ...util import PSORunner
13
- from ...util import GraphGenerator
14
- from ...util.CTkToolTip import CTkToolTip as ctt
15
-
16
- def create_tab(self, tab):
17
-
18
- # URL
19
- tab.grid_columnconfigure(0, weight=1)
20
- tab.grid_rowconfigure(0, weight=1)
21
- tab.grid_rowconfigure(1, weight=200)
22
-
23
- #self.progress_container = customtkinter.CTkFrame(tab)
24
- #self.progress_container.grid_columnconfigure(0, weight=1)
25
- #self.progress_container.grid_columnconfigure(1, weight=1)
26
- #self.progress_container.grid_columnconfigure(2, weight=1)
27
- #self.progress_container.grid(row=0, column=0, padx=(20, 20), pady=(20, 20), sticky="nsew")
28
-
29
- # Add progress bar to progress container
30
- #self.progress_message_left = customtkinter.CTkLabel(self.progress_container, text="")
31
- #self.progress_message_left.grid(row=0, column=0, padx=(10, 10), pady=(10, 10), sticky="w")
32
-
33
- #self.progress_message_middle = customtkinter.CTkLabel(self.progress_container, text="Calibration not running...")
34
- #self.progress_message_middle.grid(row=0, column=1, padx=(10, 10), pady=(10, 10), sticky="ew")
35
-
36
- #self.progress_message_right = customtkinter.CTkLabel(self.progress_container, text="")
37
- #self.progress_message_right.grid(row=0, column=2, padx=(10, 10), pady=(10, 10), sticky="e")
38
-
39
- self.textbox = customtkinter.CTkTextbox(tab)
40
- self.textbox.grid(row=1, column=0, padx=(20, 20), pady=(20, 20), sticky="nsew")
41
- self.textbox.insert("0.0", "Welcome to the CSIP PSO Calibration Tool!\n\nUse the Setup tab to define steps and calibration parameters. Use this tab to view logs and observe calibration progress. Once finished, use the Results tab to generate figures and graphs.")
42
-
File without changes