33import warnings
44from functools import partial
55
6- from qtpy .QtCore import QSize , Qt , QThread
6+ from qtpy .QtCore import QSize , Qt , QThread , Signal
77from qtpy .QtGui import QIcon
88from qtpy .QtWidgets import QGridLayout , QMainWindow , QMessageBox , QProgressBar , QToolButton , QWidget
99
@@ -39,10 +39,11 @@ def run(self):
3939 self .result = partial (main_window , settings = settings , initial_image = im )
4040
4141
42- class MainWindow (QMainWindow ):
43- def __init__ (self , title ):
44- super ().__init__ ()
45- self .setWindowTitle (title )
42+ class PartSegGUILauncher (QWidget ):
43+ launched = Signal ()
44+
45+ def __init__ (self , parent = None ):
46+ super ().__init__ (parent )
4647 self .lib_path = ""
4748 self .final_title = ""
4849 analysis_icon = QIcon (os .path .join (icons_dir , "icon.png" ))
@@ -66,28 +67,10 @@ def __init__(self, title):
6667 layout .addWidget (self .progress , 0 , 0 , 1 , 2 )
6768 layout .addWidget (self .analysis_button , 1 , 1 )
6869 layout .addWidget (self .mask_button , 1 , 0 )
69- widget = QWidget ()
70- widget .setLayout (layout )
71- self .setCentralWidget (widget )
72- self .setWindowIcon (analysis_icon )
73- self .prepare = None
74- self .wind = None
75- self ._update_theme ()
76-
77- def _update_theme (self ):
78- napari_settings = napari_get_settings (state_store .save_folder )
79- with warnings .catch_warnings ():
80- warnings .simplefilter ("ignore" , FutureWarning )
81- theme = get_theme (napari_settings .appearance .theme )
82- # TODO understand qss overwrite mechanism
83- self .setStyleSheet (napari_template (get_stylesheet (), ** theme ))
84-
85- def _launch_begin (self ):
86- self .progress .setVisible (True )
87- self .progress .setRange (0 , 0 )
88- self .analysis_button .setDisabled (True )
89- self .mask_button .setDisabled (True )
90- import_config ()
70+ self .setLayout (layout )
71+ self .prepare = Prepare ("" )
72+ self .prepare .finished .connect (self .launch )
73+ self .wind = []
9174
9275 def launch_analysis (self ):
9376 self ._launch_begin ()
@@ -97,8 +80,7 @@ def launch_analysis(self):
9780 def _launch_analysis (self ):
9881 self .lib_path = "PartSeg._roi_analysis.main_window"
9982 self .final_title = f"{ APP_NAME } { ANALYSIS_NAME } "
100- self .prepare = Prepare (self .lib_path )
101- self .prepare .finished .connect (self .launch )
83+ self .prepare .module = self .lib_path
10284
10385 def launch_mask (self ):
10486 self ._launch_begin ()
@@ -108,28 +90,56 @@ def launch_mask(self):
10890 def _launch_mask (self ):
10991 self .lib_path = "PartSeg._roi_mask.main_window"
11092 self .final_title = f"{ APP_NAME } { MASK_NAME } "
111- self .prepare = Prepare (self .lib_path )
112- self .prepare .finished .connect (self .launch )
93+ self .prepare .module = self .lib_path
94+
95+ def _launch_begin (self ):
96+ self .progress .setVisible (True )
97+ self .progress .setRange (0 , 0 )
98+ self .analysis_button .setDisabled (True )
99+ self .mask_button .setDisabled (True )
100+ import_config ()
113101
114102 def window_shown (self ):
115- self .close ()
103+ self .progress .setHidden (True )
104+ self .analysis_button .setEnabled (True )
105+ self .mask_button .setEnabled (True )
106+ self .launched .emit ()
116107
117108 def launch (self ):
118- if self .prepare .result is None :
109+ if self .prepare .result is None : # pragma: no cover
119110 self .close ()
120111 return
121- if self .prepare .errors :
112+ if self .prepare .errors : # pragma: no cover
122113 errors_message = QMessageBox ()
123114 errors_message .setText ("There are errors during start" )
124115 errors_message .setInformativeText (
125116 "During load saved state some of data could not be load properly\n "
126117 "The files has prepared backup copies in state directory (Help > State directory)"
127118 )
128119 errors_message .setStandardButtons (QMessageBox .Ok )
129- text = "\n " .join ("File: " + x [0 ] + "\n " + str (x [1 ]) for x in self .prepare .errors )
120+ text = "\n " .join (f "File: { x [0 ]} " + "\n " + str (x [1 ]) for x in self .prepare .errors )
130121
131122 errors_message .setDetailedText (text )
132123 errors_message .exec_ ()
133124 wind = self .prepare .result (title = self .final_title , signal_fun = self .window_shown )
134125 wind .show ()
135- self .wind = wind
126+ self .wind .append (wind )
127+
128+
129+ class MainWindow (QMainWindow ):
130+ def __init__ (self , title ):
131+ super ().__init__ ()
132+ self .setWindowTitle (title )
133+ widget = PartSegGUILauncher (self )
134+ widget .launched .connect (self .close )
135+ self .setCentralWidget (widget )
136+ self .setWindowIcon (QIcon (os .path .join (icons_dir , "icon.png" )))
137+ self ._update_theme ()
138+
139+ def _update_theme (self ):
140+ napari_settings = napari_get_settings (state_store .save_folder )
141+ with warnings .catch_warnings ():
142+ warnings .simplefilter ("ignore" , FutureWarning )
143+ theme = get_theme (napari_settings .appearance .theme )
144+ # TODO understand qss overwrite mechanism
145+ self .setStyleSheet (napari_template (get_stylesheet (), ** theme ))
0 commit comments