1212class BasePluginSingleImage (QTabWidget ):
1313 """A basic plugin template for working with **single images**"""
1414
15- def __init__ (self , viewer : "napari.viewer.Viewer" ):
15+ def __init__ (self , viewer : "napari.viewer.Viewer" , parent = None ):
1616 """Creates a Base plugin with several buttons pre-defined but not added to a layout :
1717
1818 * Open file prompt to select images directory
@@ -29,10 +29,13 @@ def __init__(self, viewer: "napari.viewer.Viewer"):
2929
3030 super ().__init__ ()
3131
32- # self.master = parent
32+ self .parent = parent
33+ """Parent widget"""
3334 self ._viewer = viewer
3435 """napari.viewer.Viewer: viewer in which the widget is displayed"""
3536
37+ self .docked_widgets = []
38+
3639 self .image_path = ""
3740 """str: path to image folder"""
3841
@@ -67,7 +70,7 @@ def __init__(self, viewer: "napari.viewer.Viewer"):
6770 QSizePolicy .Fixed , QSizePolicy .Fixed
6871 )
6972
70- self .btn_close = ui .make_button ("Close" , self .close , self )
73+ self .btn_close = ui .make_button ("Close" , self .remove_from_viewer , self )
7174
7275 # self.lbl_ft = QLabel("Filetype :", self)
7376 # self.lbl_ft2 = QLabel("(Folders of .png or single .tif files)", self)
@@ -126,13 +129,23 @@ def update_default(self):
126129 def remove_from_viewer (self ):
127130 """Removes the widget from the napari window.
128131 Can be re-implemented in children classes if needed"""
132+ if len (self .docked_widgets ) != 0 :
133+ [
134+ self ._viewer .window .remove_dock_widget (w )
135+ for w in self .docked_widgets
136+ if w is not None
137+ ]
138+
139+ if self .parent is not None :
140+ self .parent .remove_from_viewer ()
141+ return
129142 self ._viewer .window .remove_dock_widget (self )
130143
131144
132145class BasePluginFolder (QTabWidget ):
133146 """A basic plugin template for working with **folders of images**"""
134147
135- def __init__ (self , viewer : "napari.viewer.Viewer" ):
148+ def __init__ (self , viewer : "napari.viewer.Viewer" , parent = None ):
136149 """Creates a plugin template with the following widgets defined but not added in a layout :
137150
138151 * A button to load a folder of images
@@ -143,7 +156,7 @@ def __init__(self, viewer: "napari.viewer.Viewer"):
143156
144157 * A dropdown menu to select the file extension to be loaded from the folders"""
145158 super ().__init__ ()
146-
159+ self . parent = parent
147160 self ._viewer = viewer
148161
149162 self .images_filepaths = ["" ]
@@ -188,6 +201,22 @@ def __init__(self, viewer: "napari.viewer.Viewer"):
188201 self .lbl_result_path .setReadOnly (True )
189202 #######################################################
190203
204+ def make_close_button (self ):
205+ btn = ui .make_button ("Close" , self .remove_from_viewer )
206+ return btn
207+
208+ def make_prev_button (self ):
209+ btn = ui .make_button (
210+ "Previous" , lambda : self .setCurrentIndex (self .currentIndex () - 1 )
211+ )
212+ return btn
213+
214+ def make_next_button (self ):
215+ btn = ui .make_button (
216+ "Next" , lambda : self .setCurrentIndex (self .currentIndex () + 1 )
217+ )
218+ return btn
219+
191220 def load_dataset_paths (self ):
192221 """Loads all image paths (as str) in a given folder for which the extension matches the set filetype
193222
@@ -251,11 +280,15 @@ def remove_docked_widgets(self):
251280 [
252281 self ._viewer .window .remove_dock_widget (w )
253282 for w in self .docked_widgets
283+ if w is not None
254284 ]
255285 self .docked_widgets = []
256286 self .container_docked = False
257287
258288 def remove_from_viewer (self ):
259289 """Close the widget and the docked widgets, if any"""
260290 self .remove_docked_widgets ()
291+ if self .parent is not None :
292+ self .parent .remove_from_viewer ()
293+ return
261294 self ._viewer .window .remove_dock_widget (self )
0 commit comments