1
- """Class manager."""
1
+ """Class manager dialog.
2
+
3
+ Dialog window for selecting and mapping annotations to classes.
4
+ """
2
5
3
6
import FreeSimpleGUI as sg
4
7
import numpy as np
5
8
import pandas as pd
6
9
7
10
8
- def refresh_conversion (conversion , values ):
11
+ def _refresh_conversion (
12
+ conversion : dict [str , str | float ], values : dict
13
+ ) -> dict [str , str | float ]:
14
+ """Refresh the conversion dictionary with the new values from the GUI."""
9
15
for o in conversion :
10
- if values ["--" + o + "--" ] == True :
11
- conversion [o ] = values ["--" + o + "_class--" ]
12
- elif values ["--" + o + "--" ] == False :
13
- conversion [o ] = np .nan
16
+ conversion [o ] = (
17
+ values [f"--{ o } _class--" ] if values [f"--{ o } --" ] else np .nan
18
+ )
14
19
return conversion
15
20
16
21
17
- def CM_exec (markers , marker_conv ):
18
- conv_old = marker_conv
19
-
20
- num_names = 0
21
- for name in marker_conv :
22
- if not pd .isnull (marker_conv [name ]):
23
- num_names += 1
24
-
22
+ def _create_class_manager_window (
23
+ marker_conv : dict [str , str | float ], num_names : int
24
+ ) -> sg .Window :
25
+ """Create the class manager window."""
25
26
layout_column = [
26
27
[sg .Text ("Annotation" , size = (25 , 1 )), sg .Text ("Class" , size = (20 , 1 ))],
27
- [
28
- sg .Text (
29
- "--------------------------------------------------------------------------------"
30
- )
31
- ],
28
+ [sg .Text ("-" * 80 )],
32
29
* [
33
30
[
34
31
sg .Checkbox (
35
32
o ,
36
33
default = not pd .isnull (marker_conv [o ]),
37
34
enable_events = True ,
38
35
size = (20 , 5 ),
39
- key = "--" + o + " --" ,
36
+ key = f "--{ o } --" ,
40
37
),
41
38
sg .InputText (
42
39
str (marker_conv [o ]),
43
40
visible = not pd .isnull (marker_conv [o ]),
44
41
size = (20 , 5 ),
45
- key = "--" + o + " _class--" ,
42
+ key = f "--{ o } _class--" ,
46
43
),
47
44
]
48
45
for o in marker_conv
@@ -68,11 +65,11 @@ def CM_exec(markers, marker_conv):
68
65
sg .Column (
69
66
layout = [
70
67
[
71
- sg .Text ("initial annotations: " ),
68
+ sg .Text ("Initial annotations: " ),
72
69
sg .Text (str (len (marker_conv ))),
73
70
],
74
71
[
75
- sg .Text ("used annotations: " ),
72
+ sg .Text ("Used annotations: " ),
76
73
sg .Text (str (num_names ), key = "-num_anno-" ),
77
74
],
78
75
[
@@ -99,30 +96,40 @@ def CM_exec(markers, marker_conv):
99
96
]
100
97
]
101
98
102
- window_CM = sg .Window ("Classes" , layout_CM , size = (600 , 400 ))
99
+ return sg .Window ("Classes" , layout_CM , size = (600 , 400 ))
100
+
101
+
102
+ def show_class_manager_dialog (
103
+ marker_conv : dict [str , str | float ],
104
+ ) -> dict [str , str | float ]:
105
+ """Show the class managar dialog."""
106
+ conv_old = marker_conv
107
+ num_names = sum (not pd .isnull (v ) for v in marker_conv .values ())
108
+
109
+ window = _create_class_manager_window (marker_conv , num_names )
103
110
104
111
while True :
105
- event_CM , values_CM = window_CM .read ()
112
+ event , values = window .read ()
113
+
114
+ if event == sg .WIN_CLOSED or event == "--cancel--" :
115
+ marker_conv = conv_old
116
+ break
117
+
106
118
for k in marker_conv :
107
- if event_CM == "--" + k + "--" :
108
- window_CM ["--" + k + "_class--" ].Update (
109
- visible = values_CM ["--" + k + "--" ]
110
- )
111
- if values_CM ["--" + k + "--" ] == True :
112
- window_CM ["--" + k + "_class--" ].Update (value = k )
119
+ # checkbox clicked?
120
+ if event == f"--{ k } --" :
121
+ window [f"--{ k } _class--" ].Update (visible = values [f"--{ k } --" ])
122
+ if values [f"--{ k } --" ]:
123
+ window [f"--{ k } _class--" ].Update (value = k )
113
124
num_names += 1
114
- window_CM ["-num_anno-" ].Update (value = str (num_names ))
115
- elif values_CM ["--" + k + "--" ] == False :
116
- window_CM ["--" + k + "_class--" ].Update (value = False )
125
+ else :
126
+ window [f"--{ k } _class--" ].Update (value = False )
117
127
num_names -= 1
118
- window_CM ["-num_anno-" ].Update (value = str (num_names ))
128
+ window ["-num_anno-" ].Update (value = str (num_names ))
119
129
120
- if event_CM == sg .WIN_CLOSED or event_CM == "--cancel--" :
121
- marker_conv = conv_old
122
- break
123
- if event_CM == "--accept--" :
124
- marker_conv = refresh_conversion (marker_conv , values_CM )
130
+ if event == "--accept--" :
131
+ marker_conv = _refresh_conversion (marker_conv , values )
125
132
break
126
133
127
- window_CM .close ()
134
+ window .close ()
128
135
return marker_conv
0 commit comments