def save_cfg_dicomdir(self): """Function intended to save the DICOM directory once button is pressed""" self.cfg['folders']['dicom'] = self.working_dir Configuration.save_config(self.cfg['folders']["rootdir"], self.cfg) Output.msg_box( text="Folder changed in the configuration file to {}".format( self.working_dir), title='Changed folder')
def closeEvent(self, event): """saves the settings found here as a yaml file which may be loaded the next time as the configuration used""" self.cfg["preprocess"]["dcm2nii"][ "OutputFileStruct"] = self.lineEditFilename.text() self.cfg["preprocess"]["dcm2nii"][ "IncludeFiles"] = self.lineEditIncludeFiles.text() Configuration.save_config(self.cfg["folders"]["rootdir"], self.cfg) event.accept()
def closeEvent(self, event): """saves the settings found here as a yaml file which may be loaded the next time as the configuration used""" self.cfg["lead_detection"]["PaCER"][ "metal_threshold"] = self.lineEditMetalThreshold.text() self.cfg["lead_detection"]["PaCER"][ "snr_threshold"] = self.lineEditSNRThreshold.text() self.cfg["lead_detection"]["PaCER"]["lambda"] = int( self.lineEditLambda.text()) Configuration.save_config(ROOTDIR, self.cfg) event.accept()
def redefineDefault(self): """redefines which template is set as default on the right list and in the cfg-file""" if not self.selected_subj_Gen: Output.msg_box(text="No template selected. Please indicate new default one.", title="No data selected") return elif len(self.selected_subj_Gen) > 1: Output.msg_box(text="Please select only one image as default.", title="Too many templates selected") return else: default_template = [FileOperations.return_full_filename(self.wdirTemplate, x) for x in self.selected_subj_Gen] self.cfg['folders']['default_template'] = default_template[0] Configuration.save_config(ROOTDIR, self.cfg) self.run_reload_files()
def change_workingdir(self): """A new window appears in which the working directory can be set; besides, data is stored in the preferences file so that they will be loaded automatically next time""" self.working_dir = QFileDialog.getExistingDirectory( self, directory=self.working_dir, caption='Change working directory') self.label_workingdir.setText('Working DIR: {}'.format( self.working_dir)) self.mInput.clear() items = FileOperations.list_folders(self.working_dir, prefix='') self.addAvailableItems(items) if self.option_gui == 'dcm2niix': self.cfg['folders']['dicom'] = self.working_dir Configuration.save_config(self.cfg['folders']["rootdir"], self.cfg)
def closeEvent(self, event): """saves the settings found here as a yaml file which may be loaded the next time as the configuration used""" self.cfg["preprocess"]["ANTsN4"]["prefix"] = self.lineEditPrefix.text() self.cfg["preprocess"]["ANTsN4"]["shrink-factor"] = int(self.lineEditShrink.text()) self.cfg["preprocess"]["ANTsN4"]["bspline-fitting"] = int(self.lineEditBSplineDist.text()) self.cfg["preprocess"]["ANTsN4"]["convergence"][0] = int(self.lineEditConv1.text()) self.cfg["preprocess"]["ANTsN4"]["convergence"][1] = int(self.lineEditConv2.text()) self.cfg["preprocess"]["ANTsN4"]["convergence"][2] = int(self.lineEditConv3.text()) self.cfg["preprocess"]["ANTsN4"]["convergence"][3] = int(self.lineEditConv4.text()) self.cfg["preprocess"]["ANTsN4"]["threshold"] = float(self.lineEditTolerance.text()) self.cfg["preprocess"]["ANTsN4"]["dti_prefix"] = self.lineEditDiffPrefix.text() self.cfg["preprocess"]["registration"]["prefix"] = self.lineEditPrefixRegistration.text() self.cfg["preprocess"]["registration"]["resample_spacing"] = self.lineResampleSpacing.text() self.cfg["preprocess"]["normalisation"]["sequences"] = self.lineEditNormalisationSequences.text() Configuration.save_config(ROOTDIR, self.cfg) event.accept()
def __init__(self, parent=None): super(TabContent, self).__init__() self.selected_subj_Gen = '' self.selected_subj_ANT = '' self.cfg = Configuration.load_config(ROOTDIR) if os.path.isdir(self.cfg['folders']['nifti']): self.niftidir = self.cfg['folders']['nifti'] else: self.niftidir = os.getcwd() self.cfg['folders']['rootdir'] = ROOTDIR Configuration.save_config(ROOTDIR, self.cfg) # General layout for the tab view and initialisation of tabs self.layout = QVBoxLayout(self) self.tabs = QTabWidget() self.tabs.resize(150, 100) self.layout.addWidget(self.tabs) # Customize tabs # ============================== Tab 1 - General ============================== self.tab1 = GuiTabGeneral() self.tabs.addTab(self.tab1, "General") # ============================== Tab 2 - Work on templates ============================== self.tab2 = GuiTabTemplate() self.tabs.addTab(self.tab2, "Template") # ============================== Tab 3 - ANTs routines ============================== self.tab3 = GuiTabPreprocessANTs() self.tabs.addTab(self.tab3, "Preprocess Imaging (ANTsPy)") # ============================== Tab 3 - Lead detection ============================== self.tab4 = GuiTabDetectLeads() self.tabs.addTab(self.tab4, "Detect leads (Pacer)") # Add tabs to widget self.layout.addWidget(self.tabs) self.setLayout(self.layout)
def __init__(self, parent=None): super(QWidget, self).__init__(parent) # Load configuration files and general settings self.cfg = Configuration.load_config(ROOTDIR) if os.path.isdir(self.cfg['folders']['dicom']): self.dicomdir = self.cfg['folders']['dicom'] else: self.dicomdir = FileOperations.set_wdir_in_config(self.cfg, foldername='dicom', init=True) self.cfg['folders']['dicom'] = self.dicomdir self.cfg['folders']['rootdir'] = ROOTDIR Configuration.save_config(ROOTDIR, self.cfg) # Create general layout self.tot_layout = QVBoxLayout(self) self.mid_layout = QHBoxLayout(self) # ============================ Create upper of GUI, i.e. working directory ============================ self.folderboxDcm2nii = QGroupBox("Directory (DICOM-files)") self.HBoxUpperDcm2nii = QVBoxLayout(self.folderboxDcm2nii) self.label_dicomdir = QLabel('dicom DIR: {}'.format(self.dicomdir)) self.HBoxUpperDcm2nii.addWidget(self.label_dicomdir) self.btn_dicomdir = QPushButton('Change working \ndirectory') self.btn_dicomdir.setFixedSize(150, 40) self.btn_dicomdir.clicked.connect(self.change_dicomdir) self.btn_savedir = QPushButton('Save directory \nto config file') self.btn_savedir.setFixedSize(150, 40) self.btn_savedir.setToolTip(Output.split_lines(setToolTips.saveDirButton())) self.btn_savedir.clicked.connect(self.save_cfg) hlay_upper = QHBoxLayout() hlay_upper.addWidget(self.btn_dicomdir) hlay_upper.addWidget(self.btn_savedir) hlay_upper.addStretch(1) self.HBoxUpperDcm2nii.addLayout(hlay_upper) # ==================== Create Content for Lists, i.e. input/output ==================== self.listboxInputDcm2nii = QGroupBox('Available subjects in working directory') self.listboxInput = QVBoxLayout(self.listboxInputDcm2nii) self.mInput = QListWidget() self.listboxInput.addWidget(self.mInput) self.mButtonToAvailable = QPushButton("<<") self.mBtnMoveToAvailable = QPushButton(">") self.mBtnMoveToSelected = QPushButton("<") self.mButtonToSelected = QPushButton(">>") self.mBtnUp = QPushButton("Up") self.mBtnDown = QPushButton("Down") self.listboxOutputDcm2nii = QGroupBox('Subjects to process') self.listboxOutput = QVBoxLayout(self.listboxOutputDcm2nii) self.mOutput = QListWidget() self.listboxOutput.addWidget(self.mOutput) # First column on the left side vlay = QVBoxLayout() vlay.addStretch() vlay.addWidget(self.mBtnMoveToAvailable) vlay.addWidget(self.mBtnMoveToSelected) vlay.addStretch() vlay.addWidget(self.mButtonToAvailable) vlay.addWidget(self.mButtonToSelected) vlay.addStretch() # Second column on the right side vlay2 = QVBoxLayout() vlay2.addStretch() vlay2.addWidget(self.mBtnUp) vlay2.addWidget(self.mBtnDown) vlay2.addStretch() # ==================== Lower part of GUI, i.e. Preferences/Start estimation ==================== self.btn_preferences = QPushButton("Preferences") self.btn_preferences.clicked.connect(self.settings_show) self.btn_run_dcm2niix = QPushButton("Run dcm2niix") self.btn_run_dcm2niix.setToolTip(setToolTips.run_dcm2niix()) self.btn_run_dcm2niix.clicked.connect(self.start_converting) hlay_bottom = QHBoxLayout() hlay_bottom.addStretch(1) hlay_bottom.addWidget(self.btn_preferences) hlay_bottom.addWidget(self.btn_run_dcm2niix) hlay_bottom.addStretch() # ==================== Set all contents to general Layout ======================= self.mid_layout.addWidget(self.listboxInputDcm2nii) self.mid_layout.addLayout(vlay) self.mid_layout.addWidget(self.listboxOutputDcm2nii) self.mid_layout.addLayout(vlay2) self.tot_layout.addWidget(self.folderboxDcm2nii) self.tot_layout.addLayout(self.mid_layout) self.tot_layout.addLayout(hlay_bottom) try: self.mInput.clear() items = FileOperations.list_folders(inputdir=self.cfg['folders']['dicom'], prefix='', files2lookfor='') items = self.check_for_complete_input(list(items)) self.add_available_subj(items) except FileExistsError: print('{} without any valid files/folders, continuing ...'.format(self.dicomdir)) self.update_buttons_status() self.connections()
def save_cfg(self): """Function intended to save the DICOM directory once button is pressed""" self.cfg['folders']['dicom'] = self.dicomdir Configuration.save_config(self.cfg['folders']['rootdir'], self.cfg) Output.msg_box(text="Folder changed in configuration to {}".format(self.dicomdir), title="Changed folder")
def __init__(self, parent=None): super(GuiTabDetectLeads, self).__init__(parent) self.selected_subj_ANT = '' # General settings/variables/helper files needed at some point self.cfg = Configuration.load_config(ROOTDIR) if os.path.isdir(self.cfg['folders']['nifti']): self.niftidir = self.cfg['folders']['nifti'] else: self.niftidir = FileOperations.set_wdir_in_config( self.cfg, foldername='nifti', init=True) self.cfg['folders']['nifti'] = self.niftidir self.cfg['folders']['rootdir'] = ROOTDIR Configuration.save_config(ROOTDIR, self.cfg) self.lay = QHBoxLayout(self) self.tab = QWidget() # Customize tab # ============================== Tab 3 - Lead detection routines ============================== self.tab.layout = QHBoxLayout() self.tab.setLayout(self.tab.layout) # ------------------------- Upper left part (Folder) ------------------------- # self.FolderboxTab = QGroupBox("Directory") self.HBoxUpperLeftTab = QVBoxLayout(self.FolderboxTab) self.lblWdirTab = QLabel('wDIR: {}'.format(self.niftidir)) self.HBoxUpperLeftTab.addWidget(self.lblWdirTab) self.btnChangeWdir = QPushButton('Change working directory') self.btnChangeWdir.clicked.connect(self.change_wdir) self.btnReloadFilesTab = QPushButton('Reload files') self.btnReloadFilesTab.clicked.connect(self.run_reload_files) self.HBoxUpperLeftTab.addWidget(self.btnChangeWdir) self.HBoxUpperLeftTab.addWidget(self.btnReloadFilesTab) # ------------------------- Middle left part (Settings) ------------------------- # self.SettingsTabLeadDetect = QGroupBox("Preferences") self.HBoxMiddleLeftTabExt = QVBoxLayout(self.SettingsTabLeadDetect) self.btn_LeadDetectSettings = QPushButton('Settings \nLead detection') self.btn_LeadDetectSettings.clicked.connect( self.run_PreferencesLeadDetection) self.btn_LeadDetectSettings.setToolTip(setToolTips.ANTsSettings()) self.HBoxMiddleLeftTabExt.addWidget(self.btn_LeadDetectSettings) # ------------------------- Middle left part (Processing) ------------------------- # self.ActionsTabANTs = QGroupBox("Lead detection routines") self.HBoxMiddleLeftTab = QVBoxLayout(self.ActionsTabANTs) self.btn_LeadDetectPacer = QPushButton('PaCER algorithm') self.btn_LeadDetectPacer.clicked.connect(self.run_LeadDetectionPaCER) self.btn_RefineDetectedLeads = QPushButton('Refine detected leads') self.btn_RefineDetectedLeads.clicked.connect(self.run_ManualCorrection) self.HBoxMiddleLeftTab.addWidget(self.btn_LeadDetectPacer) self.HBoxMiddleLeftTab.addWidget(self.btn_RefineDetectedLeads) # ------------------------- Lower left part (Processing) ------------------------- # self.QualityTabLeadDetect = QGroupBox( "Quality checks for Lead detection") self.HBoxLowerLeftTab = QVBoxLayout(self.QualityTabLeadDetect) self.btn_QC_LeadDetect = QPushButton( 'Check lead detection \nin viewer') self.btn_QC_LeadDetect.setToolTip(setToolTips.compareNIFTIfiles()) self.btn_QC_LeadDetect.clicked.connect(self.VisualiseLeadDetection) self.HBoxLowerLeftTab.addWidget(self.btn_QC_LeadDetect) # -------------------- Right part (Subject list) ----------------------- # self.listbox = QGroupBox('Available subjects') self.HBoxUpperRightTab = QVBoxLayout(self.listbox) self.availableNiftiTab = QListWidget() self.availableNiftiTab.setSelectionMode( QAbstractItemView.ExtendedSelection) itemsTab = FileOperations.list_folders( self.niftidir, prefix=self.cfg['folders']['prefix']) self.add_available_items(self.availableNiftiTab, itemsTab, msg='no') self.availableNiftiTab.itemSelectionChanged.connect( self.change_list_item) self.HBoxUpperRightTab.addWidget(self.availableNiftiTab) # Combine all Boxes for Tab 2 Layout self.LeftboxTabANTs = QGroupBox() self.HBoxTabLeadDetectLeft = QVBoxLayout(self.LeftboxTabANTs) self.HBoxTabLeadDetectLeft.addWidget(self.FolderboxTab) self.HBoxTabLeadDetectLeft.addStretch(1) self.HBoxTabLeadDetectLeft.addWidget(self.SettingsTabLeadDetect) self.HBoxTabLeadDetectLeft.addWidget(self.ActionsTabANTs) self.HBoxTabLeadDetectLeft.addWidget(self.QualityTabLeadDetect) self.tab.layout.addWidget(self.LeftboxTabANTs) self.tab.layout.addWidget(self.listbox) self.lay.addWidget(self.tab)
def __init__(self, parent=None): super(GuiTabTemplate, self).__init__(parent) self.selected_subj_Gen = '' self.wdirTemplate = os.path.join(ROOTDIR, 'ext', 'templates') # General settings/variables/helper files needed needed at some point self.cfg = Configuration.load_config(ROOTDIR) if os.path.isdir(self.cfg['folders']['nifti']): self.niftidir = self.cfg['folders']['nifti'] else: self.niftidir = FileOperations.set_wdir_in_config(self.cfg, foldername='nifti', init=True) self.cfg['folders']['rootdir'] = ROOTDIR Configuration.save_config(ROOTDIR, self.cfg) self.lay = QHBoxLayout(self) self.tab = QWidget() # Customize tab # ============================== Tab 1 - General ============================== self.tab.layout = QHBoxLayout() self.tab.setLayout(self.tab.layout) # ------------------------- Upper left part (Folder) ------------------------- # self.FolderboxTab = QGroupBox("Directory (Templates)") self.HBoxUpperLeftTab = QVBoxLayout(self.FolderboxTab) self.dirTemplates = QLabel('wDIR: {}'.format(self.wdirTemplate)) self.HBoxUpperLeftTab.addWidget(self.dirTemplates) self.btnChangeWdir = QPushButton('Change working directory') self.btnChangeWdir.setDisabled(True) self.btnReloadFilesTab = QPushButton('Reload files') self.btnReloadFilesTab.clicked.connect(self.run_reload_files) self.HBoxUpperLeftTab.addWidget(self.btnChangeWdir) self.HBoxUpperLeftTab.addWidget(self.btnReloadFilesTab) # ------------------------- Lower left part (Processing) ------------------------- # self.ActionsTab = QGroupBox("Functions") self.HBoxLowerLeftTab = QVBoxLayout(self.ActionsTab) self.btn_new_default = QPushButton('Set new \ndefault') # self.btn_subj_details.setToolTip(setToolTips.subjectDetails()) TODO: new ToolTip needed self.btn_new_default.clicked.connect(self.redefineDefault) self.btn_viewer = QPushButton('View selected \nTemplate in viewer') # self.btn_viewer.setToolTip(setToolTips.displayFolderContent()) TODO: new ToolTip needed self.btn_viewer.clicked.connect(self.view_template) self.create_SST = QPushButton('Create Study-specific\ntemplate') # self.btn_renaming.setToolTip(setToolTips.renameFolders()) TODO: new ToolTip needed self.create_SST.clicked.connect(self.create_StudySpecificTemplate) self.HBoxLowerLeftTab.addWidget(self.btn_viewer) self.HBoxLowerLeftTab.addWidget(self.btn_new_default) self.HBoxLowerLeftTab.addWidget(self.create_SST) # -------------------- Right part (Subject list) ----------------------- # self.listbox = QGroupBox('Available subjects') self.HBoxUpperRightTab = QVBoxLayout(self.listbox) self.availableTemplates = QListWidget() self.availableTemplates.setSelectionMode(QAbstractItemView.ExtendedSelection) self.availableTemplates.itemSelectionChanged.connect(self.change_list_item) itemsTab = set(FileOperations.list_files_in_folder(self.wdirTemplate)) self.add_available_templates(self.availableTemplates, itemsTab) self.HBoxUpperRightTab.addWidget(self.availableTemplates) # Combine all Boxes for General Tab Layout self.LeftboxTab = QGroupBox() self.HBoxTabLeft = QVBoxLayout(self.LeftboxTab) self.HBoxTabLeft.addWidget(self.FolderboxTab) self.HBoxTabLeft.addStretch() self.HBoxTabLeft.addWidget(self.ActionsTab) self.tab.layout.addWidget(self.LeftboxTab) self.tab.layout.addWidget(self.listbox) self.lay.addWidget(self.tab)
def comboChangedDetectionMethod(self): self.cfg["lead_detection"]["PaCER"][ "detection_method"] = self.lineDetectionMethod.currentText() Configuration.save_config(ROOTDIR, self.cfg)
def __init__(self, parent=None): super(GuiTabPreprocessANTs, self).__init__(parent) self.selected_subj_ANT = '' self.cfg = Configuration.load_config(ROOTDIR) if os.path.isdir(self.cfg['folders']['nifti']): self.niftidir = self.cfg['folders']['nifti'] else: self.niftidir = FileOperations.set_wdir_in_config(self.cfg, foldername='nifti', init=True) self.cfg['folders']['nifti'] = self.niftidir self.cfg['folders']['rootdir'] = ROOTDIR Configuration.save_config(ROOTDIR, self.cfg) # Customize tab self.lay = QHBoxLayout(self) self.tab = QWidget() self.tab.layout = QHBoxLayout() self.tab.setLayout(self.tab.layout) # ------------------------- Upper left part (Folder) ------------------------- # self.FolderboxTab = QGroupBox('Directory (NIFTI-files)') self.HBoxUpperLeftTab = QVBoxLayout(self.FolderboxTab) self.lblWdirTab = QLabel('wDIR: {}'.format(self.niftidir)) self.HBoxUpperLeftTab.addWidget(self.lblWdirTab) self.btnChangeWdir = QPushButton('Change working directory') self.btnChangeWdir.setToolTip(setToolTips.ChangeWdirNIFTI()) self.btnChangeWdir.clicked.connect(self.change_wdir) self.btnReloadFilesTab = QPushButton('Reload files') self.btnReloadFilesTab.clicked.connect(self.run_reload_files) self.HBoxUpperLeftTab.addWidget(self.btnChangeWdir) self.HBoxUpperLeftTab.addWidget(self.btnReloadFilesTab) # ------------------------- Middle left part (Preferences) ------------------------- # self.SettingsTabANTs = QGroupBox('Preferences') self.HBoxMiddleLeftTabExt = QVBoxLayout(self.SettingsTabANTs) self.btn_ANTsettings = QPushButton('ANT Settings') self.btn_ANTsettings.clicked.connect(self.run_ANTsPreferences) self.btn_ANTsettings.setToolTip(setToolTips.ANTsSettings()) self.HBoxMiddleLeftTabExt.addWidget(self.btn_ANTsettings) # ------------------------- Middle left part (ANTs routines) ------------------------- # self.ActionsTabANTs = QGroupBox('ANTs routines') self.HBoxMiddleLeftTab = QVBoxLayout(self.ActionsTabANTs) self.btn_N4BiasCorr = QPushButton('N4BiasCorrect') self.btn_N4BiasCorr.setToolTip(setToolTips.N4BiasCorrection()) self.btn_N4BiasCorr.clicked.connect(self.run_n4Bias_corr) self.btn_MRIreg = QPushButton('MR-Registration') self.btn_MRIreg.setToolTip(setToolTips.RegisterMRI2template()) self.btn_MRIreg.clicked.connect(self.run_RegisterMRI2template) self.btn_CTreg = QPushButton('CT-Registration') self.btn_CTreg.setToolTip(setToolTips.RegisterCT2MRI()) self.btn_CTreg.clicked.connect(self.run_RegisterCT2MRI) self.HBoxMiddleLeftTab.addWidget(self.btn_N4BiasCorr) self.HBoxMiddleLeftTab.addWidget(self.btn_MRIreg) self.HBoxMiddleLeftTab.addWidget(self.btn_CTreg) # ------------------------- Lower left part (Processing) ------------------------- # self.QualityTabANTs = QGroupBox('Quality checks for ANTs preprocessing') self.HBoxLowerLeftTab = QVBoxLayout(self.QualityTabANTs) self.btn_QC_ANTsPreproc = QPushButton('View available \nNIFTI-files in viewer') self.btn_QC_ANTsPreproc.setToolTip(setToolTips.compareNIFTIfiles()) self.btn_QC_ANTsPreproc.clicked.connect(self.display_nifti_files) self.HBoxLowerLeftTab.addWidget(self.btn_QC_ANTsPreproc) # -------------------- Right part (Subject list) ----------------------- # self.listbox = QGroupBox('Available subjects') self.HBoxUpperRightTab = QVBoxLayout(self.listbox) self.availableNiftiTab = QListWidget() self.availableNiftiTab.setSelectionMode(QAbstractItemView.ExtendedSelection) itemsTab = FileOperations.list_folders(self.niftidir, prefix=self.cfg['folders']['prefix']) self.add_available_items(self.availableNiftiTab, itemsTab, msg='no') self.availableNiftiTab.itemSelectionChanged.connect(self.change_list_item) self.HBoxUpperRightTab.addWidget(self.availableNiftiTab) # Combine all Boxes for Tab 2 Layout self.LeftboxTabANTs = QGroupBox() self.HBoxTabANTsLeft = QVBoxLayout(self.LeftboxTabANTs) self.HBoxTabANTsLeft.addWidget(self.FolderboxTab) self.HBoxTabANTsLeft.addStretch(1) self.HBoxTabANTsLeft.addWidget(self.SettingsTabANTs) self.HBoxTabANTsLeft.addWidget(self.ActionsTabANTs) self.HBoxTabANTsLeft.addWidget(self.QualityTabANTs) self.tab.layout.addWidget(self.LeftboxTabANTs) self.tab.layout.addWidget(self.listbox) self.lay.addWidget(self.tab)
def comboChangedNormalisation(self): self.cfg["preprocess"]["normalisation"]["template_image"] = self.lineTemplatesAvailable.currentText() Configuration.save_config(ROOTDIR, self.cfg)
def comboChangedRegDefault(self): self.cfg["preprocess"]["registration"]["registration_method"] = self.lineRegistrationMethod.currentText() Configuration.save_config(ROOTDIR, self.cfg)
def __init__(self, parent=None): super(GuiTabGeneral, self).__init__(parent) self.selected_subj_Gen = '' # General settings/variables/helper files needed needed at some point self.cfg = Configuration.load_config(ROOTDIR) if os.path.isdir(self.cfg['folders']['nifti']): self.niftidir = self.cfg['folders']['nifti'] else: self.niftidir = FileOperations.set_wdir_in_config( self.cfg, foldername='nifti', init=True) # self.cfg['folders']['rootdir'] = ROOTDIR ## changed 2021/02/23 Configuration.save_config(ROOTDIR, self.cfg) self.lay = QHBoxLayout(self) self.tab = QWidget() # Customize tab # ============================== Tab 1 - General ============================== self.tab.layout = QHBoxLayout() self.tab.setLayout(self.tab.layout) # ------------------------- Upper left part (Folder) ------------------------- # self.FolderboxTab = QGroupBox("Directory (NIFTI-files)") self.HBoxUpperLeftTab = QVBoxLayout(self.FolderboxTab) self.lblWdirTab = QLabel('wDIR: {}'.format(self.niftidir)) self.HBoxUpperLeftTab.addWidget(self.lblWdirTab) self.btnChangeWdir = QPushButton('Change working directory') self.btnChangeWdir.setToolTip(setToolTips.ChangeWdirDICOM()) self.btnChangeWdir.clicked.connect(self.change_wdir) self.btnReloadFilesTab = QPushButton('Reload files') self.btnReloadFilesTab.clicked.connect(self.run_reload_files) self.HBoxUpperLeftTab.addWidget(self.btnChangeWdir) self.HBoxUpperLeftTab.addWidget(self.btnReloadFilesTab) # ------------------------- Lower left part (Processing) ------------------------- # self.ActionsTab = QGroupBox("Functions") self.HBoxLowerLeftTab = QVBoxLayout(self.ActionsTab) self.btn_subj_details = QPushButton('Subject details') self.btn_subj_details.setToolTip(setToolTips.subjectDetails()) self.btn_subj_details.clicked.connect(self.openDetails) self.btn_dcm2nii = QPushButton('Dcm2niix') self.btn_dcm2nii.setToolTip(setToolTips.runDCM2NII()) self.btn_dcm2nii.clicked.connect(self.run_DCM2NII) self.btn_viewer = QPushButton('View available \nNIFTI-files in viewer') self.btn_viewer.setToolTip(setToolTips.displayFolderContent()) self.btn_viewer.clicked.connect(self.show_nifti_files) self.btn_renaming = QPushButton('Rename\nfolders') self.btn_renaming.setToolTip(setToolTips.renameFolders()) self.btn_renaming.clicked.connect(self.run_rename_folders) self.HBoxLowerLeftTab.addWidget(self.btn_subj_details) self.HBoxLowerLeftTab.addWidget(self.btn_dcm2nii) self.HBoxLowerLeftTab.addWidget(self.btn_viewer) self.HBoxLowerLeftTab.addWidget(self.btn_renaming) # -------------------- Right part (Subject list) ----------------------- # self.listbox = QGroupBox('Available subjects') self.HBoxUpperRightTab = QVBoxLayout(self.listbox) self.availableNiftiTab = QListWidget() self.availableNiftiTab.setSelectionMode( QAbstractItemView.ExtendedSelection) self.availableNiftiTab.itemSelectionChanged.connect( self.change_list_item) itemsTab = FileOperations.list_folders( self.niftidir, prefix=self.cfg['folders']['prefix']) self.add_available_items(self.availableNiftiTab, itemsTab) self.HBoxUpperRightTab.addWidget(self.availableNiftiTab) # Combine all Boxes for General Tab Layout self.LeftboxTab = QGroupBox() self.HBoxTabLeft = QVBoxLayout(self.LeftboxTab) self.HBoxTabLeft.addWidget(self.FolderboxTab) self.HBoxTabLeft.addStretch() self.HBoxTabLeft.addWidget(self.ActionsTab) self.tab.layout.addWidget(self.LeftboxTab) self.tab.layout.addWidget(self.listbox) self.lay.addWidget(self.tab)