def initUI(self): print('here') '''init ui ''' self.threading_enabled = True # logging self.logger_console = QTextBrowser(self) self.logger_console.setReadOnly(True) self.logger_console.textCursor().movePosition(QTextCursor.Left, QTextCursor.KeepAnchor, 1) self.logger_console.setHtml('<html>') self.logger_console.ensureCursorVisible() if not DEBUG: XStream.stdout().messageWritten.connect(self.set_html_black) XStream.stderr().messageWritten.connect(self.set_html_red) self.handler = QtHandler() self.handler.setFormatter(logging.Formatter(TA_logger.default_format)) # change default handler for logging TA_logger.setHandler(self.handler) self.setWindowTitle(__NAME__ + ' v' + str(__VERSION__)) # Initialize tab screen self.tabs = QTabWidget(self) self.model_tab = QWidget() self.train_tab = QWidget() self.ensemble_tab = QWidget() self.predict_tab = QWidget() self.advanced_tab = QWidget() # self.post_process = QWidget() # redundant with predict # Add tabs self.tabs.addTab( self.model_tab, 'Model' ) # split concatenate visualize model and or weights/ can I rename also things and allow for freeze of the layers too... self.tabs.addTab(self.train_tab, 'Build Train/GT Sets = Image concatenation') # self.tabs.addTab(self.predict_tab, 'Predict') self.tabs.addTab( self.ensemble_tab, 'Ensemble' ) # To combine several outputs/models to improve seg quality self.tabs.addTab(self.advanced_tab, 'Advanced') # mutate model, feeze, 3D, ... TODO self.advanced_tab.setVisible(False) # self.tabs.setVisible(False) # self.tabs.addTab(self.post_process, 'Post Process') # redundant with predict self.tabs.currentChanged.connect(self._onTabChange) # creating model tab self.model_tab.layout = QGridLayout() self.model_tab.layout.setAlignment(Qt.AlignTop) self.model_tab.layout.setColumnStretch(0, 25) self.model_tab.layout.setColumnStretch(1, 75) self.model_tab.layout.setHorizontalSpacing(3) self.model_tab.layout.setVerticalSpacing(3) # should I allow this to be stored in config file, probably not... self.input_model = OpenFileOrFolderWidget( parent_window=self, label_text='Load model', is_file=True, extensions= "Supported Files (*.h5 *.H5 *.hdf5 *.HDF5 *.json *.JSON *.model);;All Files (*)", tip_text='Drag and drop a model file here') self.input_weights = OpenFileOrFolderWidget( parent_window=self, label_text='Load weights (optional)', is_file=True, extensions= "Supported Files (*.h5 *.H5 *.hdf5 *.HDF5);;All Files (*)", tip_text='Drag and drop a single weight file here' ) # TODO shall i add *.model ??? # parameters for the pretrained models self.groupBox_pretrain = QGroupBox('Model', objectName='groupBox_pretrain') self.groupBox_pretrain.setEnabled(True) # groupBox layout self.groupBox_pretrain_layout = QGridLayout() self.groupBox_pretrain_layout.setAlignment(Qt.AlignTop) self.groupBox_pretrain_layout.setColumnStretch(0, 25) self.groupBox_pretrain_layout.setColumnStretch(1, 25) self.groupBox_pretrain_layout.setColumnStretch(2, 50) self.groupBox_pretrain_layout.setColumnStretch(3, 2) self.groupBox_pretrain_layout.setHorizontalSpacing(3) self.groupBox_pretrain_layout.setVerticalSpacing(3) self.groupBox_pretrain_layout.addWidget(self.input_model, 1, 0, 1, 3) self.groupBox_pretrain_layout.addWidget(self.input_weights, 2, 0, 1, 3) self.groupBox_pretrain.setLayout(self.groupBox_pretrain_layout) self.model_tab.layout.addWidget(self.groupBox_pretrain, 1, 0, 1, 2) self.model_tab.setLayout(self.model_tab.layout) # widget global layout table_widget_layout = QVBoxLayout() table_widget_layout.setAlignment(Qt.AlignTop) table_widget_layout.addWidget(self.tabs) log_and_main_layout = QHBoxLayout() log_and_main_layout.setAlignment(Qt.AlignTop) # TODO put this in a group to get the stuff log_groupBox = QGroupBox('Log', objectName='log_groupBox') log_groupBox.setEnabled(True) help = PyQT_markdown() try: # this_dir, this_filename = os.path.split(__file__) # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'getting_started2.md'), # title='getting started: predict using pre-trained network') # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'getting_started.md'), # title='getting started: build and train a custom network') # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'getting_started3.md'), # title='getting started: further train the EPySeg model on your data') # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'pretrained_model.md'), # title='Load a pre-trained model') # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'model.md'), # title='Build a model from scratch') # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'load_model.md'), # title='Load a model') # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'train.md'), title='Train') # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'predict.md'), title='Predict') # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'preprocessing.md'), # title='Training dataset parameters') # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'data_augmentation.md'), # title='Data augmentation') # TODO prevent this window to be resize upon tab changes pass except: traceback.print_exc() # Initialize tab screen self.help_tabs = QTabWidget(self) self.help_tabs.setMinimumWidth(500) self.log_tab = QWidget() self.help_html_tab = QWidget() self.settings_GUI = QWidget() # Add tabs self.help_tabs.addTab(self.log_tab, 'Log') self.help_tabs.addTab(self.help_html_tab, 'Help') self.help_tabs.addTab(self.settings_GUI, 'GUI settings') # creating model tab self.log_tab.layout = QVBoxLayout() self.log_tab.layout.setAlignment(Qt.AlignTop) # global system progress bar self.pbar = QProgressBar(self) self.log_tab.layout.addWidget(self.logger_console) # self.log_tab.layout.addWidget(self.instant_help) self.log_tab.layout.addWidget(self.pbar) self.log_tab.setLayout(self.log_tab.layout) self.help_html_tab.layout = QVBoxLayout() self.help_html_tab.layout.setAlignment(Qt.AlignTop) self.help_html_tab.layout.setContentsMargins(0, 0, 0, 0) self.help_html_tab.layout.addWidget(help) self.help_html_tab.setLayout(self.help_html_tab.layout) self.enable_threading_check = QCheckBox( 'Threading enable/disable', objectName='enable_threading_check') self.enable_threading_check.setChecked(True) # self.enable_threading_check.stateChanged.connect(self._set_threading) self.enable_debug = QCheckBox('Debug mode', objectName='enable_debug') self.enable_debug.setChecked(False) self.enable_debug.stateChanged.connect(self._enable_debug) self.settings_GUI.layout = QVBoxLayout() self.settings_GUI.layout.setAlignment(Qt.AlignTop) self.settings_GUI.layout.addWidget(self.enable_threading_check) self.settings_GUI.layout.addWidget(self.enable_debug) self.settings_GUI.setLayout(self.settings_GUI.layout) log_and_main_layout.addLayout(table_widget_layout) log_and_main_layout.addWidget(self.help_tabs) self.setLayout(log_and_main_layout) try: screen = QApplication.desktop().screenNumber( QApplication.desktop().cursor().pos()) centerPoint = QApplication.desktop().screenGeometry( screen).center() self.setGeometry( QtCore.QRect(centerPoint.x() - self.width(), centerPoint.y() - self.height(), self.width(), self.height())) except: pass # # monitor mouse position to show helpful tips/guide the user # self.setMouseTracking(True) # does not work well because of contained objects capturing mouse --> maybe simplest is to have the self.show()
from PyQt5.QtWidgets import QDialog from PyQt5.QtWidgets import QApplication, QGridLayout from PyQt5.QtWidgets import QSpinBox, QComboBox, QVBoxLayout, QLabel, QCheckBox, QGroupBox from PyQt5.QtCore import Qt import sys # logging from epyseg.tools.logger import TA_logger logger = TA_logger() class PostProcessGUI(QDialog): def __init__(self, parent_window=None): super().__init__(parent=parent_window) self.initUI() def initUI(self): input_v_layout = QVBoxLayout() input_v_layout.setAlignment(Qt.AlignTop) input_v_layout.setContentsMargins(0, 0, 0, 0) # TODO add a set of parameters there for the post process groupBox_post_process = QGroupBox( 'Refine segmentation ("None" or "local median" should be prefered)' ) groupBox_post_process.setEnabled(True) groupBox_post_process_parameters_layout = QGridLayout() groupBox_post_process_parameters_layout.setAlignment(Qt.AlignTop) groupBox_post_process_parameters_layout.setHorizontalSpacing(3) groupBox_post_process_parameters_layout.setVerticalSpacing(3)
# en fait le panel serait 2D sinon mieux vaut utiliser une vbox ou une hbox # puis-je aussi faire un systeme de grid ??? pas si facile avec des images from epyseg.draw.shapes.rect2d import Rect2D from PyQt5.QtCore import QPointF, QRectF from epyseg.figure.row import Row # import math # logger from epyseg.tools.logger import TA_logger # en fait # TODO controler les set2width and settoheight de ce truc afin d'etre sur qu'ils fonctionnent car je ne pense pas que ce soit le cas en fait logger = TA_logger(logging_level=TA_logger.DEBUG) # can have a 1D and 2D with horizontal or vertical stuff # TODO really try # ça marche un panel peut contenir autant de panels que necessaire --> tt sera panel dans ce truc # pourrait implement un sticky mode qui se comporte comme une figure ds EZF et un floating mode ou tout flotte # should I sketch content for fusion --> draw how it would look like if done # ce truc serait dedie au 2D en fait et le reste se ferait par des trucs differents # could be called row and col and allow them to contain panels # figure serait le master container --> en fait je garde la structure # d'avant' # pkoi ne pas tt restaurer alors