@@ -1185,8 +1185,10 @@ def display_images(
1185
1185
1186
1186
# destroy all additional microscopes
1187
1187
for microscope_name in list (self .additional_microscopes .keys ()):
1188
- self .destroy_virtual_microscope (microscope_name )
1189
- self .additional_microscopes = {}
1188
+ destroy_window = False
1189
+ if microscope_name not in self .additional_microscopes_configs :
1190
+ destroy_window = True
1191
+ self .destroy_virtual_microscope (microscope_name , destroy_window )
1190
1192
1191
1193
# show additional camera view popup
1192
1194
for microscope_name in self .additional_microscopes_configs :
@@ -1196,32 +1198,31 @@ def display_images(
1196
1198
self .additional_microscopes_configs [microscope_name ],
1197
1199
)
1198
1200
1199
- self .additional_microscopes [microscope_name ] = {
1200
- "show_img_pipe" : show_img_pipe ,
1201
- "data_buffer" : data_buffer ,
1202
- }
1203
- popup_window = CameraViewPopupWindow (self .view , microscope_name )
1204
- camera_view_controller = CameraViewController (
1205
- popup_window .camera_view , self
1206
- )
1207
- camera_view_controller .data_buffer = self .additional_microscopes [
1208
- microscope_name
1209
- ]["data_buffer" ]
1210
- camera_view_controller .microscope_name = microscope_name
1211
- popup_window .popup .bind ("<Configure>" , camera_view_controller .resize )
1212
- self .additional_microscopes [microscope_name ]["popup_window" ] = popup_window
1213
- self .additional_microscopes [microscope_name ][
1214
- "camera_view_controller"
1215
- ] = camera_view_controller
1216
- popup_window .popup .protocol (
1217
- "WM_DELETE_WINDOW" ,
1218
- combine_funcs (
1219
- popup_window .popup .dismiss ,
1220
- lambda : self .additional_microscopes [microscope_name ].pop (
1221
- "camera_view_controller"
1201
+ if microscope_name not in self .additional_microscopes :
1202
+ self .additional_microscopes [microscope_name ] = {}
1203
+
1204
+ popup_window = CameraViewPopupWindow (self .view , microscope_name )
1205
+ camera_view_controller = CameraViewController (
1206
+ popup_window .camera_view , self
1207
+ )
1208
+ camera_view_controller .microscope_name = microscope_name
1209
+ popup_window .popup .bind ("<Configure>" , camera_view_controller .resize )
1210
+ self .additional_microscopes [microscope_name ]["popup_window" ] = popup_window
1211
+ self .additional_microscopes [microscope_name ][
1212
+ "camera_view_controller"
1213
+ ] = camera_view_controller
1214
+ popup_window .popup .protocol (
1215
+ "WM_DELETE_WINDOW" ,
1216
+ combine_funcs (
1217
+ popup_window .popup .dismiss ,
1218
+ lambda : self .additional_microscopes [microscope_name ].pop (
1219
+ "camera_view_controller"
1220
+ ),
1222
1221
),
1223
- ),
1224
- )
1222
+ )
1223
+
1224
+ self .additional_microscopes [microscope_name ]["show_img_pipe" ] = show_img_pipe
1225
+ self .additional_microscopes [microscope_name ]["data_buffer" ] = data_buffer
1225
1226
1226
1227
# start thread
1227
1228
capture_img_thread = threading .Thread (
@@ -1237,13 +1238,15 @@ def display_images(
1237
1238
)
1238
1239
capture_img_thread .start ()
1239
1240
1240
- def destroy_virtual_microscope (self , microscope_name ):
1241
+ def destroy_virtual_microscope (self , microscope_name , destroy_window = True ):
1241
1242
"""Destroy virtual microscopes.
1242
1243
1243
1244
Parameters
1244
1245
----------
1245
1246
microscope_name : str
1246
1247
The microscope name
1248
+ destroy_window : bool
1249
+ The flag to dismiss window.
1247
1250
"""
1248
1251
if microscope_name not in self .additional_microscopes :
1249
1252
return
@@ -1253,9 +1256,10 @@ def destroy_virtual_microscope(self, microscope_name):
1253
1256
self .model .release_pipe (f"{ microscope_name } _show_img_pipe" )
1254
1257
del self .additional_microscopes [microscope_name ]["show_img_pipe" ]
1255
1258
# destroy the popup window
1256
- self .additional_microscopes [microscope_name ]["popup_window" ].popup .dismiss ()
1257
- self .additional_microscopes [microscope_name ]["camera_view_controller" ] = None
1258
- del self .additional_microscopes [microscope_name ]
1259
+ if destroy_window :
1260
+ self .additional_microscopes [microscope_name ]["popup_window" ].popup .dismiss ()
1261
+ self .additional_microscopes [microscope_name ]["camera_view_controller" ] = None
1262
+ del self .additional_microscopes [microscope_name ]
1259
1263
1260
1264
def move_stage (self , pos_dict ):
1261
1265
"""Trigger the model to move the stage.
0 commit comments