def __init__(self): QToolBar.__init__(self) VTKObservationMixin.__init__(self) self.parameterNode = WarpDrive.WarpDriveLogic().getParameterNode() self.addObserver(self.parameterNode, vtk.vtkCommand.ModifiedEvent, self.updateToolbarFromParameterNode) self.setWindowTitle(qt.QObject().tr("LeadDBS")) self.name = 'LeadDBS' # # Modality # self.addWidget(qt.QLabel('Modality:')) self.modalityComboBox = qt.QComboBox() self.modalityComboBox.addItem('T1w') self.modalityComboBox.view().pressed.connect(self.onModalityPressed) self.addWidget(self.modalityComboBox) # # B <-> F slider # self.addSeparator() self.addWidget(qt.QLabel('Template:')) templateSlider = qt.QSlider(1) templateSlider.singleStep = 10 templateSlider.minimum = 0 templateSlider.maximum = 100 templateSlider.value = 0 templateSlider.setFixedWidth(120) templateSlider.connect( 'valueChanged(int)', lambda value: slicer.util. setSliceViewerLayers(foregroundOpacity=value / 100.0)) self.addWidget(templateSlider) # # Space Separator # self.addSeparator() empty = qt.QWidget() empty.setSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Preferred) self.addWidget(empty) # # Subject # self.subjectNameLabel = qt.QLabel('Subject: ') self.addWidget(self.subjectNameLabel) # # Harden Changes # self.addSeparator() self.hardenChangesCheckBox = qt.QCheckBox("Harden Changes") self.hardenChangesCheckBox.checked = True self.addWidget(self.hardenChangesCheckBox) # # Save # self.nextButton = qt.QPushButton("Exit") self.nextButton.setFixedWidth(75) self.nextButton.setStyleSheet("background-color: green") self.addWidget(self.nextButton) self.nextButton.connect("clicked(bool)", self.onNextButton) # # Update # self.updateModalities(self.parameterNode.GetParameter("subjectPath")) self.initSubject() self.updateToolbarFromParameterNode()
time.sleep(5) exit() else: control = qt.QWidget() layout = qt.QVBoxLayout() control.setLayout(layout) b0 = qt.QPushButton("0: VTK CPU ray cast") layout.addWidget(b0) b0.connect('clicked()', vr0) b1 = qt.QPushButton("1: VTK GPU ray cast") layout.addWidget(b1) b1.connect('clicked()', vr1) b2 = qt.QPushButton("2: VTK GPU texture mapping") layout.addWidget(b2) b2.connect('clicked()', vr2) b3 = qt.QPushButton("3: NCI GPU ray cast") layout.addWidget(b3) b3.connect('clicked()', vr3) b4 = qt.QPushButton("4: NCI GPU ray cast (multi-volume)") layout.addWidget(b4) b4.connect('clicked()', vr4) s1 = qt.QSlider(qt.Qt.Horizontal, control) layout.addWidget(s1) s1.connect('valueChanged(int)', vrthres) be = qt.QPushButton("Exit") layout.addWidget(be) be.connect('clicked()', exit) p = mainWindow().geometry control.setGeometry(p.x() - 30, p.y() - 30, 300, 700) control.show()
def setup(self): ScriptedLoadableModuleWidget.setup(self) self.caseInfoCollapsibleButton = ctk.ctkCollapsibleButton() self.caseInfoCollapsibleButton.text = "Case information" self.caseInfoCollapsibleButton.collapsed = False self.layout.addWidget(self.caseInfoCollapsibleButton) self.caseAreaLayout = qt.QGridLayout(self.caseInfoCollapsibleButton) # Select case row = 0 self.loadCaseButton = ctk.ctkPushButton() self.loadCaseButton.text = "Load case" self.loadCaseButton.toolTip = "Load a case folder" self.caseAreaLayout.addWidget(self.loadCaseButton, row, 0) # Reset button self.resetButton = ctk.ctkPushButton() self.resetButton.text = "Close case" self.resetButton.toolTip = "Close the current case" self.caseAreaLayout.addWidget(self.resetButton, row, 1) # Case info row += 1 self.caseInfoFrame = qt.QFrame() self.caseInfoFrame.setFrameStyle(0x0002 | 0x0010) self.caseInfoFrame.lineWidth = 2 self.caseInfoFrame.setStyleSheet( "background-color: #EEEEEE; margin: 10px") self.caseAreaLayout.addWidget(self.caseInfoFrame, row, 0, 1, 2) self.caseInfoFrameLayout = qt.QGridLayout() self.caseInfoFrame.setLayout(self.caseInfoFrameLayout) self.caseIdLabel = qt.QLabel("Case id: ") self.caseIdLabel.setStyleSheet("font-weight: bold") self.caseInfoFrameLayout.addWidget(self.caseIdLabel, 0, 0) self.showEnhancementCheckboxGroup = qt.QButtonGroup() self.showJustOriginalButton = qt.QRadioButton("Original only") self.showJustOriginalButton.setChecked(True) self.showEnhancementCheckboxGroup.addButton( self.showJustOriginalButton, 0) self.caseInfoFrameLayout.addWidget(self.showJustOriginalButton, 1, 0) self.showOriginalPlusEnhancedButton = qt.QRadioButton( "Original and enhanced") self.showEnhancementCheckboxGroup.addButton( self.showOriginalPlusEnhancedButton, 1) self.caseInfoFrameLayout.addWidget(self.showOriginalPlusEnhancedButton, 2, 0) self.showJustEnhancedButton = qt.QRadioButton("Enhanced only") self.showEnhancementCheckboxGroup.addButton( self.showJustEnhancedButton, 2) self.caseInfoFrameLayout.addWidget(self.showJustEnhancedButton, 3, 0) # Center Volumes button self.centerVolumesButton = ctk.ctkPushButton() self.centerVolumesButton.text = "Center image/s" self.centerVolumesButton.toolTip = "Center all the current visible images" self.centerVolumesButton.setFixedWidth(200) # self.centerVolumesButton.toolTip = "Load a case folder" self.caseInfoFrameLayout.addWidget(self.centerVolumesButton, 4, 0) # Enhancement fine tuning self.vascularFactorLabel = qt.QLabel("Vascular factor") self.vascularFactorLabel.setStyleSheet("font-weight: bold") self.caseInfoFrameLayout.addWidget(self.vascularFactorLabel, 0, 1) self.vascularFactorSlider = qt.QSlider() self.vascularFactorSlider.orientation = 2 # Vertical self.vascularFactorSlider.value = 5 self.vascularFactorSlider.minimum = 0 self.vascularFactorSlider.maximum = 10 # self.vascularFactorSlider.setStyleSheet("margin-top:10px;padding-top:20px") # self.vascularFactorSlider.setToolTip("Move the slider for a fine tuning segmentation") self.caseInfoFrameLayout.addWidget(self.vascularFactorSlider, 1, 1, 4, 1, 0x0004) self.enhancementFactorLabel = qt.QLabel("Enhancement factor") self.enhancementFactorLabel.setStyleSheet("font-weight: bold") self.caseInfoFrameLayout.addWidget(self.enhancementFactorLabel, 0, 2) self.enhancementFactorSlider = qt.QSlider() self.enhancementFactorSlider.orientation = 2 # Vertical self.enhancementFactorSlider.minimum = 0 self.enhancementFactorSlider.maximum = 10 self.enhancementFactorSlider.value = 5 # self.vascularFactorSlider.setStyleSheet("margin-top:10px;padding-top:20px") # self.vascularFactorSlider.setToolTip("Move the slider for a fine tuning segmentation") self.caseInfoFrameLayout.addWidget(self.enhancementFactorSlider, 1, 2, 4, 1, 0x0004) # Editor row += 1 self.editorWidget = ui.CustomEditorWidget(self.parent) self.editorWidget.setup() self.editorCollapsibleButton = self.editorWidget.editLabelMapsFrame self.editorCollapsibleButton.text = "Edit the current eye image" self.editorCollapsibleButton.collapsed = False self.editorWidget.toolsColor.terminologyCollapsibleButton.setVisible( False) self.layout.addWidget(self.editorCollapsibleButton) ### DIAGNOSIS self.diagnosisCollapsibleButton = ctk.ctkCollapsibleButton() self.diagnosisCollapsibleButton.text = "Diagnosis" self.diagnosisCollapsibleButton.collapsed = False self.layout.addWidget(self.diagnosisCollapsibleButton) self.diagnosisAreaLayout = qt.QVBoxLayout( self.diagnosisCollapsibleButton) # Visual Acuity label = qt.QLabel("Visual acuity (VA): ") label.setStyleSheet("margin: 10px 0 0 10px; font-weight: bold") self.diagnosisAreaLayout.addWidget(label) self.vaFrame = qt.QFrame() self.vaFrame.setFrameStyle(0x0002 | 0x0010) self.vaFrame.lineWidth = 2 self.vaFrame.setStyleSheet("background-color: #EEEEEE; margin: 10px") self.vaFrame.setFixedWidth(240) self.diagnosisAreaLayout.addWidget(self.vaFrame) self.vaFrameLayout = qt.QGridLayout(self.vaFrame) self.vaFrameLayout.addWidget(qt.QLabel("OS"), 0, 0) self.osLineEdit = qt.QLineEdit() self.osLineEdit.setFixedWidth(80) self.osLineEdit.setStyleSheet("background-color: white") self.vaFrameLayout.addWidget(self.osLineEdit, 0, 1) self.vaFrameLayout.addWidget(qt.QLabel("OD"), 1, 0) self.odLineEdit = qt.QLineEdit() self.odLineEdit.setFixedWidth(80) self.odLineEdit.setStyleSheet("background-color: white") self.vaFrameLayout.addWidget(self.odLineEdit, 1, 1) self.vaModalityButtonGroup = qt.QButtonGroup() self.scvaRadioButton = qt.QRadioButton() self.scvaRadioButton.setText("SCVA") self.vaFrameLayout.addWidget(self.scvaRadioButton, 0, 2) self.vaModalityButtonGroup.addButton(self.scvaRadioButton) self.bcvaRadioButton = qt.QRadioButton() self.bcvaRadioButton.setText("BCVA") self.vaFrameLayout.addWidget(self.bcvaRadioButton, 1, 2) self.vaModalityButtonGroup.addButton(self.bcvaRadioButton) self.ucvaRadioButton = qt.QRadioButton() self.ucvaRadioButton.setText("UCVA") self.vaFrameLayout.addWidget(self.ucvaRadioButton, 2, 2) self.vaModalityButtonGroup.addButton(self.ucvaRadioButton) # Problems detected label = qt.QLabel("Problems detected: ") label.setStyleSheet("margin: 10px 0 0 10px; font-weight: bold") self.diagnosisAreaLayout.addWidget(label) self.problemsFrame = qt.QFrame() self.problemsFrame.setFrameStyle(0x0002 | 0x0010) self.problemsFrame.lineWidth = 2 self.problemsFrame.setStyleSheet( "background-color: #EEEEEE; margin: 10px") self.diagnosisAreaLayout.addWidget(self.problemsFrame) self.problemsFrameLayout = qt.QGridLayout() self.problemsFrame.setLayout(self.problemsFrameLayout) self.problemsButtons = [] self.microaneurysmsCheckbox = qt.QCheckBox() self.microaneurysmsCheckbox.setText("Microaneurysms") self.problemsFrameLayout.addWidget(self.microaneurysmsCheckbox, 0, 0) self.problemsButtons.append(self.microaneurysmsCheckbox) self.exudatesCheckbox = qt.QCheckBox() self.exudatesCheckbox.setText("Exudates") self.problemsFrameLayout.addWidget(self.exudatesCheckbox, 0, 1) self.problemsButtons.append(self.exudatesCheckbox) self.haemorrhagesCheckbox = qt.QCheckBox() self.haemorrhagesCheckbox.setText("Haemorrhages") self.problemsFrameLayout.addWidget(self.haemorrhagesCheckbox, 0, 2) self.problemsButtons.append(self.haemorrhagesCheckbox) self.cottonWoolSpotsCheckbox = qt.QCheckBox() self.cottonWoolSpotsCheckbox.setText("Cotton wool spots") self.problemsFrameLayout.addWidget(self.cottonWoolSpotsCheckbox, 1, 0) self.problemsButtons.append(self.cottonWoolSpotsCheckbox) self.NeovascularisationCheckbox = qt.QCheckBox() self.NeovascularisationCheckbox.setText("Neovascularisation") self.problemsFrameLayout.addWidget(self.NeovascularisationCheckbox, 1, 1) self.problemsButtons.append(self.NeovascularisationCheckbox) label = qt.QLabel("Diabetic retinopathy diagnosis: ") label.setStyleSheet("margin: 10px 0 0 10px; font-weight: bold") self.diagnosisAreaLayout.addWidget(label) # Diabetic Retinopathy diagnosis self.diabeticRetinopathyDiagnosisFrame = qt.QFrame() self.diabeticRetinopathyDiagnosisFrame.setFrameStyle(0x0002 | 0x0010) self.diabeticRetinopathyDiagnosisFrame.lineWidth = 2 self.diabeticRetinopathyDiagnosisFrame.setStyleSheet( "background-color: #EEEEEE; margin: 10px") self.diagnosisAreaLayout.addWidget( self.diabeticRetinopathyDiagnosisFrame) self.diabeticRetinopathyDiagnosisFrameLayout = qt.QHBoxLayout() self.diabeticRetinopathyDiagnosisFrame.setLayout( self.diabeticRetinopathyDiagnosisFrameLayout) self.diagnosisRadioButtonGroup = qt.QButtonGroup() for i in range(5): rb = qt.QRadioButton(str(i)) self.diagnosisRadioButtonGroup.addButton(rb, i) self.diabeticRetinopathyDiagnosisFrameLayout.addWidget(rb) self.diagnosisRadioButtonGroup.buttons()[0].setChecked(True) # Additional comments label = qt.QLabel("Additional comments:") label.setStyleSheet("margin: 10px 0 0 10px; font-weight: bold") self.diagnosisAreaLayout.addWidget(label) row += 1 self.additionalCommentsText = qt.QTextEdit() self.additionalCommentsText.setStyleSheet("margin: 10px") self.diagnosisAreaLayout.addWidget(self.additionalCommentsText) self.saveReportButton = ctk.ctkPushButton() self.saveReportButton.text = "Save report" self.saveReportButton.setFixedWidth(300) self.diagnosisAreaLayout.addWidget(self.saveReportButton) self.printReportButton = ctk.ctkPushButton() self.printReportButton.text = "Save and generate PDF" self.printReportButton.setFixedWidth(300) self.diagnosisAreaLayout.addWidget(self.printReportButton) self.expertModeCollapsibleButton = ctk.ctkCollapsibleButton() self.expertModeCollapsibleButton.text = "Expert mode" self.expertModeCollapsibleButton.collapsed = True self.layout.addWidget(self.expertModeCollapsibleButton) self.expertModeLayout = qt.QVBoxLayout( self.expertModeCollapsibleButton) self.expertModeCheckbox = qt.QCheckBox("Activate expert mode") self.expertModeCheckbox.checked = False self.expertModeLayout.addWidget(self.expertModeCheckbox) self.layout.addStretch(1) # Connections self.loadCaseButton.connect('clicked()', self.__onLoadCaseClicked__) # self.loadReportButton.connect('clicked()', self.__onLoadReportClicked__) self.showEnhancementCheckboxGroup.connect( "buttonClicked (int)", self.__onEnhancementButtonGroupClicked__) self.centerVolumesButton.connect('clicked()', SlicerUtil.centerAllVolumes) self.vascularFactorSlider.connect('sliderReleased()', self.__onEnhancementFineTuning__) self.enhancementFactorSlider.connect('sliderReleased()', self.__onEnhancementFineTuning__) self.saveReportButton.connect('clicked()', self.__onSaveReportClicked__) self.printReportButton.connect('clicked()', self.__onPrintReportClicked__) self.resetButton.connect('clicked()', self.reset) self.expertModeCheckbox.connect("stateChanged(int)", self.__onExpertModeStateChanged__) slicer.mrmlScene.AddObserver(slicer.vtkMRMLScene.EndCloseEvent, self.__onSceneClosed__) # Set default layout Red SlicerUtil.changeLayoutRedSingle() self.refreshUI()
def create(self): super(WatershedFromMarkerEffectOptions, self).create() if not HAVE_SIMPLEITK: self.warningLabel = qt.QLabel() self.warningLabel.text = "WatershedFromMarker is not available because\nSimpleITK is not available in this build" self.widgets.append(self.warningLabel) self.frame.layout().addWidget(self.warningLabel) return labelVolume = EditUtil.getLabelVolume() if labelVolume and labelVolume.GetImageData(): spacing = labelVolume.GetSpacing() self.minimumSigma = 0.1 * min(spacing) self.maximumSigma = 100 * self.minimumSigma else: self.minimumSigma = 0.1 self.maximumSigma = 10 self.sigmaFrame = qt.QFrame(self.frame) self.sigmaFrame.setLayout(qt.QHBoxLayout()) self.frame.layout().addWidget(self.sigmaFrame) self.widgets.append(self.sigmaFrame) tip = "Increasing this value smooths the segmentation and reduces leaks. This is the sigma used for edge detection." self.sigmaLabel = qt.QLabel("Object Scale: ", self.frame) self.sigmaLabel.setToolTip(tip) self.sigmaFrame.layout().addWidget(self.sigmaLabel) self.widgets.append(self.sigmaLabel) self.sigmaSlider = qt.QSlider(qt.Qt.Horizontal, self.frame) self.sigmaFrame.layout().addWidget(self.sigmaSlider) self.sigmaFrame.setToolTip(tip) self.widgets.append(self.sigmaSlider) self.sigmaSpinBox = qt.QDoubleSpinBox(self.frame) self.sigmaSpinBox.setToolTip(tip) self.sigmaSpinBox.suffix = "mm" self.sigmaFrame.layout().addWidget(self.sigmaSpinBox) self.widgets.append(self.sigmaSpinBox) self.sigmaSpinBox.minimum = self.minimumSigma self.sigmaSlider.minimum = self.minimumSigma self.sigmaSpinBox.maximum = self.maximumSigma self.sigmaSlider.maximum = self.maximumSigma decimals = math.floor(math.log(self.minimumSigma, 10)) if decimals < 0: self.sigmaSpinBox.decimals = -decimals + 2 self.apply = qt.QPushButton("Apply", self.frame) self.apply.objectName = self.__class__.__name__ + 'Apply' self.apply.setToolTip("Apply the extension operation") self.frame.layout().addWidget(self.apply) self.widgets.append(self.apply) helpDoc = \ """Use this effect to apply the watershed from markers segmentation from multiple initial labels. The input to this filter is current labelmap image which is expected to contain multiple labels as initial marks. The marks or labels are grown to fill the image and with edges defining the bondaries between. To segment a single object, mark the object, and then it is suggested to surround the object with a negative label on each axis. The "Object Scale" parameter is use to adjust the smoothness of the output image and prevent leakage. It is used internally for the sigma of the gradient magnitude. """ HelpButton(self.frame, helpDoc) self.sigmaSlider.connect('valueChanged(int)', self.sigmaSpinBox.setValue) self.sigmaSpinBox.connect('valueChanged(double)', self.sigmaSlider.setValue) # if either widget is changed both should change and this should be triggered self.connections.append((self.sigmaSpinBox, 'valueChanged(double)', self.onSigmaValueChanged)) self.connections.append((self.apply, 'clicked()', self.onApply)) # Add vertical spacer self.frame.layout().addStretch(1)
def setup(self): # Instantiate and connect widgets ... # Collapsible button sampleCollapsibleButton = ctk.ctkCollapsibleButton() sampleCollapsibleButton.text = "Main Panel" self.layout.addWidget(sampleCollapsibleButton) # Set layout self.formFrame = qt.QFrame(sampleCollapsibleButton) self.formFrame.setLayout(qt.QHBoxLayout()) self.formFrame1 = qt.QFrame(sampleCollapsibleButton) self.formFrame1.setLayout(qt.QHBoxLayout()) self.formFrame2 = qt.QFrame(sampleCollapsibleButton) self.formFrame2.setLayout(qt.QHBoxLayout()) self.formFrame3 = qt.QFrame(sampleCollapsibleButton) self.formFrame3.setLayout(qt.QHBoxLayout()) # bind new frame to the layout menu self.layout.addWidget(self.formFrame) self.layout.addWidget(self.formFrame1) self.layout.addWidget(self.formFrame2) self.layout.addWidget(self.formFrame3) #create volume selector self.inputSelector = qt.QLabel("Input Volume", self.formFrame) self.formFrame.layout().addWidget(self.inputSelector) self.inputSelector = slicer.qMRMLNodeComboBox(self.formFrame) self.inputSelector.nodeTypes = ("vtkMRMLScalarVolumeNode","") self.inputSelector.addEnabled = False self.inputSelector.removeEnabled = False #bind the current volume selector to the current scene of slicer self.inputSelector.setMRMLScene(slicer.mrmlScene) #bind the input selector to the frame self.formFrame.layout().addWidget(self.inputSelector) #Set up buttons Button_volume = qt.QPushButton("Show Volume") Button_volume.toolTip = "Show Volume of selected file." self.formFrame.layout().addWidget(Button_volume) Button_volume.connect('clicked(bool)', self.onButton_volumeClicked) Button_clip=qt.QPushButton("Crop Volume") Button_clip.toolTip="Crop Volume of selected file." self.formFrame.layout().addWidget(Button_clip) Button_clip.connect('clicked(bool)',self.onButton_cropClicked) Button_remove=qt.QPushButton("Remove Volume") Button_remove.toolTip="remove current scene's volume." self.formFrame.layout().addWidget(Button_remove) Button_remove.connect('clicked(bool)',self.onButton_removeClicked) #Set up sliders self.xLabel = qt.QLabel("LR", self.formFrame1) self.xLabel.setMinimumWidth(80) self.xsld = qt.QSlider(qt.Qt.Horizontal,self.formFrame1) self.xsld.setRange(0, 100) self.xsld.setValue(100) self.xsld.setFixedWidth(400) self.xsld.setFocusPolicy(qt.Qt.NoFocus) self.xsld.setPageStep(5) self.xsld.valueChanged.connect(self.xchangeValue) self.xnumber = qt.QLabel('100',self.formFrame1) self.xnumber.setMinimumWidth(50) self.formFrame1.layout().addWidget(self.xLabel) self.formFrame1.layout().addWidget(self.xsld) self.formFrame1.layout().addWidget(self.xnumber) self.yLabel = qt.QLabel("AP", self.formFrame2) self.yLabel.setMinimumWidth(80) self.ysld = qt.QSlider(qt.Qt.Horizontal,self.formFrame2) self.ysld.setRange(0, 100) self.ysld.setValue(100) self.ysld.setFixedWidth(400) self.ysld.setFocusPolicy(qt.Qt.NoFocus) self.ysld.setPageStep(5) self.ysld.valueChanged.connect(self.ychangeValue) self.ynumber = qt.QLabel('100',self.formFrame2) self.ynumber.setMinimumWidth(50) self.formFrame2.layout().addWidget(self.yLabel) self.formFrame2.layout().addWidget(self.ysld) self.formFrame2.layout().addWidget(self.ynumber) self.zLabel = qt.QLabel("SI", self.formFrame3) self.zLabel.setMinimumWidth(80) self.zsld = qt.QSlider(qt.Qt.Horizontal,self.formFrame3) self.zsld.setRange(0, 100) self.zsld.setValue(100) self.zsld.setFixedWidth(400) self.zsld.setFocusPolicy(qt.Qt.NoFocus) self.zsld.setPageStep(5) self.zsld.valueChanged.connect(self.zchangeValue) self.znumber = qt.QLabel('100',self.formFrame3) self.znumber.setMinimumWidth(50) self.formFrame3.layout().addWidget(self.zLabel) self.formFrame3.layout().addWidget(self.zsld) self.formFrame3.layout().addWidget(self.znumber) #set up initial roi region self.x = self.xsld.value self.y = self.ysld.value self.z = self.zsld.value self.Button_volume = Button_volume self.r = slicer.mrmlScene.AddNewNodeByClass("vtkMRMLAnnotationROINode") self.r.SetRadiusXYZ(100, 100, 100)
time.sleep(5) sizeROIX(50) slicer.app.processEvents() time.sleep(5) sizeROIY(50) slicer.app.processEvents() time.sleep(5) sizeROIZ(50) slicer.app.processEvents() time.sleep(5) exit() else: control = qt.QWidget() layout = qt.QVBoxLayout() control.setLayout(layout) sX = qt.QSlider(qt.Qt.Horizontal,control) layout.addWidget(sX) sX.connect('valueChanged(int)', moveROIX) sY = qt.QSlider(qt.Qt.Horizontal,control) layout.addWidget(sY) sY.connect('valueChanged(int)', moveROIY) sZ = qt.QSlider(qt.Qt.Horizontal,control) layout.addWidget(sZ) sZ.connect('valueChanged(int)', moveROIZ) sX1 = qt.QSlider(qt.Qt.Horizontal,control) layout.addWidget(sX1) sX1.connect('valueChanged(int)', sizeROIX) sY1 = qt.QSlider(qt.Qt.Horizontal,control) layout.addWidget(sY1) sY1.connect('valueChanged(int)', sizeROIY) sZ1 = qt.QSlider(qt.Qt.Horizontal,control)
def __init__(self): QToolBar.__init__(self) VTKObservationMixin.__init__(self) self.parameterNode = SmudgeModule.SmudgeModuleLogic().getParameterNode() self.addObserver(self.parameterNode, vtk.vtkCommand.ModifiedEvent, self.updateToolbarFromMRML) self.setWindowTitle(qt.QObject().tr("LeadDBS")) self.name = 'LeadDBS' # # Modality # self.addWidget(qt.QLabel('Modality:')) self.modalityComboBox = qt.QComboBox() self.modalityComboBox.addItem('t1') self.modalityComboBox.view().pressed.connect(self.onModalityPressed) self.addWidget(self.modalityComboBox) # # B <-> F slider # self.addSeparator() self.addWidget(qt.QLabel('Template:')) templateSlider = qt.QSlider(1) templateSlider.singleStep = 10 templateSlider.minimum = 0 templateSlider.maximum = 100 templateSlider.value = 0 templateSlider.setFixedWidth(120) templateSlider.connect('valueChanged(int)', lambda value: slicer.util.setSliceViewerLayers(foregroundOpacity = value / 100.0)) self.addWidget(templateSlider) # # Resolution # self.addSeparator() self.addWidget(qt.QLabel('Warp Resolution: ')) self.resolutionComboBox = qt.QComboBox() avalibaleResolutions = [0.5, 1, 2, 5, 10] self.resolutionComboBox.addItems([str(r)+'mm' for r in avalibaleResolutions]) self.resolutionComboBox.setCurrentIndex(avalibaleResolutions.index(float(self.parameterNode.GetParameter("resolution")))) self.resolutionComboBox.connect('currentIndexChanged(int)', self.onResolutionChanged) self.addWidget(self.resolutionComboBox) # # Space Separator # empty = qt.QWidget() empty.setSizePolicy(qt.QSizePolicy.Expanding,qt.QSizePolicy.Preferred) self.addWidget(empty) # # Subject # self.subjectNameLabel = qt.QLabel('Subject: ') self.addWidget(self.subjectNameLabel) # # Save # self.saveButton = qt.QPushButton("Finish and Exit") self.saveButton.setFixedWidth(200) self.saveButton.setStyleSheet("background-color: green") self.addWidget(self.saveButton) ImportAtlas.ImportAtlasLogic().run(os.path.join(self.parameterNode.GetParameter("MNIAtlasPath"), 'DISTAL Minimal (Ewert 2017)')) self.saveButton.connect("clicked(bool)", self.onSaveButton) # # Update # self.updateModalities(self.parameterNode.GetParameter("subjectPath")) reducedToolbarLogic().loadSubjectTransforms() self.onModalityPressed([],self.modalityComboBox.currentText) self.updateToolbarFromMRML()
def setup(self): ScriptedLoadableModuleWidget.setup(self) self.logic = CNN_Image_ClassifierLogic() self.moduleDir = os.path.dirname( slicer.modules.collect_training_images.path) # Instantiate and connect widgets ... # # Parameters Area # parametersCollapsibleButton = ctk.ctkCollapsibleButton() parametersCollapsibleButton.text = "Parameters" self.layout.addWidget(parametersCollapsibleButton) # Layout within the dummy collapsible button parametersFormLayout = qt.QFormLayout(parametersCollapsibleButton) self.modelSelector = qt.QComboBox() self.modelSelector.addItems(["Select model"]) modelDirectoryContents = os.listdir( os.path.join(self.moduleDir, os.pardir, "Models/retrainContainer")) modelNames = [ dir for dir in modelDirectoryContents if dir.find(".") == -1 and dir != "Dockerfile" ] self.modelSelector.addItems(["Create new model"]) self.modelSelector.addItems(modelNames) parametersFormLayout.addRow(self.modelSelector) # # Apply Button # self.applyButton = qt.QPushButton("Start") self.applyButton.toolTip = "Run the algorithm." self.applyButton.enabled = False parametersFormLayout.addRow(self.applyButton) # # Object table # self.objectTable = qt.QTableWidget() self.objectTable.setColumnCount(3) self.objectTable.setHorizontalHeaderLabels( ["Name", "Found", "Confidence"]) parametersFormLayout.addRow(self.objectTable) # # Adjust Confidence Thresholds # confidenceThresholdsCollapsibleButton = ctk.ctkCollapsibleButton() confidenceThresholdsCollapsibleButton.text = "Confidence Thresholds" self.layout.addWidget(confidenceThresholdsCollapsibleButton) confidenceFormLayout = qt.QFormLayout( confidenceThresholdsCollapsibleButton) self.confidenceSlider = qt.QSlider(0x1) #horizontal slider self.confidenceSlider.setRange(0, 100) self.confidenceSlider.setTickInterval(5) self.confidenceSlider.setTickPosition(2) #Ticks appear below slider self.confidenceSlider.setSliderPosition(80) self.confidenceSlider.setToolTip( "Set the minimum degree of confidence that must be met for an object to be considered found" ) confidenceFormLayout.addRow("Confidence: ", self.confidenceSlider) self.confidenceLabel = qt.QLabel("80%") confidenceFormLayout.addRow(self.confidenceLabel) # connections self.applyButton.connect('clicked(bool)', self.onApplyButton) self.modelSelector.connect('currentIndexChanged(int)', self.onModelSelected) self.confidenceSlider.connect('sliderMoved(int)', self.onConfidenceChanged) # Add vertical spacer self.layout.addStretch(1) # Refresh Apply button state self.onSelect() self.webcamReference = slicer.util.getNode('Webcam_Reference') if not self.webcamReference: imageSpacing = [0.2, 0.2, 0.2] imageData = vtk.vtkImageData() imageData.SetDimensions(640, 480, 1) imageData.AllocateScalars(vtk.VTK_UNSIGNED_CHAR, 1) thresholder = vtk.vtkImageThreshold() thresholder.SetInputData(imageData) thresholder.SetInValue(0) thresholder.SetOutValue(0) # Create volume node self.webcamReference = slicer.vtkMRMLVectorVolumeNode() self.webcamReference.SetName('Webcam_Reference') self.webcamReference.SetSpacing(imageSpacing) self.webcamReference.SetImageDataConnection( thresholder.GetOutputPort()) # Add volume to scene slicer.mrmlScene.AddNode(self.webcamReference) displayNode = slicer.vtkMRMLVectorVolumeDisplayNode() slicer.mrmlScene.AddNode(displayNode) self.webcamReference.SetAndObserveDisplayNodeID( displayNode.GetID()) self.webcamConnectorNode = self.createWebcamPlusConnector() self.webcamConnectorNode.Start() self.setupWebcamResliceDriver()
def setup(self): self.developerMode = True ScriptedLoadableModuleWidget.setup(self) # inspect current Scene and search for files called ?h_pial and ?h_white # if found fill the lists with relative nodes lhPialNode = slicer.mrmlScene.GetNodesByName( 'lh_pial').GetItemAsObject(0) rhPialNode = slicer.mrmlScene.GetNodesByName( 'rh_pial').GetItemAsObject(0) lhWhiteNode = slicer.mrmlScene.GetNodesByName( 'lh_white').GetItemAsObject(0) rhWhiteNode = slicer.mrmlScene.GetNodesByName( 'rh_white').GetItemAsObject(0) reconFileNode = slicer.mrmlScene.GetNodesByName( 'recon').GetItemAsObject(0) self.gmpiCB = ctk.ctkCollapsibleButton() self.gmpiCB.text = "GMPI Computation" self.layout.addWidget(self.gmpiCB) self.gmpiFL = qt.QFormLayout(self.gmpiCB) #### Left Pial selection box self.leftPialCBox = slicer.qMRMLNodeComboBox() self.leftPialCBox.nodeTypes = (("vtkMRMLModelNode"), "") self.leftPialCBox.selectNodeUponCreation = True self.leftPialCBox.addEnabled = False self.leftPialCBox.removeEnabled = False self.leftPialCBox.noneEnabled = True self.leftPialCBox.showHidden = False self.leftPialCBox.showChildNodeTypes = False self.leftPialCBox.setMRMLScene(slicer.mrmlScene) self.leftPialCBox.setToolTip("Pick the left pial.") self.gmpiFL.addRow("Left Pial: ", self.leftPialCBox) #### Left White selection box self.leftWhiteCBox = slicer.qMRMLNodeComboBox() self.leftWhiteCBox.nodeTypes = (("vtkMRMLModelNode"), "") self.leftWhiteCBox.selectNodeUponCreation = True self.leftWhiteCBox.addEnabled = False self.leftWhiteCBox.removeEnabled = False self.leftWhiteCBox.noneEnabled = True self.leftWhiteCBox.showHidden = False self.leftWhiteCBox.showChildNodeTypes = False self.leftWhiteCBox.setMRMLScene(slicer.mrmlScene) self.leftWhiteCBox.setToolTip("Pick the left pial.") #### Right Pial selection box self.rightPialCBox = slicer.qMRMLNodeComboBox() self.rightPialCBox.nodeTypes = (("vtkMRMLModelNode"), "") self.rightPialCBox.selectNodeUponCreation = True self.rightPialCBox.addEnabled = False self.rightPialCBox.removeEnabled = False self.rightPialCBox.noneEnabled = True self.rightPialCBox.showHidden = False self.rightPialCBox.showChildNodeTypes = False self.rightPialCBox.setMRMLScene(slicer.mrmlScene) self.rightPialCBox.setToolTip("Pick the right pial.") self.gmpiFL.addRow("Right Pial: ", self.rightPialCBox) #### Right White selection box self.rightWhiteCBox = slicer.qMRMLNodeComboBox() self.rightWhiteCBox.nodeTypes = (("vtkMRMLModelNode"), "") self.rightWhiteCBox.selectNodeUponCreation = True self.rightWhiteCBox.addEnabled = False self.rightWhiteCBox.removeEnabled = False self.rightWhiteCBox.noneEnabled = True self.rightWhiteCBox.showHidden = False self.rightWhiteCBox.showChildNodeTypes = False self.rightWhiteCBox.setMRMLScene(slicer.mrmlScene) self.rightWhiteCBox.setToolTip("Pick the right pial.") self.gmpiFL.addRow("Right White: ", self.rightWhiteCBox) self.gmpiFL.addRow("Left White: ", self.leftWhiteCBox) #### Fiducials list Combo Box self.fiducialsCBox = slicer.qMRMLNodeComboBox() self.fiducialsCBox.nodeTypes = (("vtkMRMLMarkupsFiducialNode"), "") self.fiducialsCBox.selectNodeUponCreation = False self.fiducialsCBox.addEnabled = False self.fiducialsCBox.removeEnabled = False self.fiducialsCBox.noneEnabled = True self.fiducialsCBox.setMRMLScene(slicer.mrmlScene) self.fiducialsCBox.setToolTip("Select a fiducial list") self.gmpiFL.addRow("Fiducial : ", self.fiducialsCBox) # if nodes already exist load them in ComboBoxes if lhWhiteNode: self.leftWhiteCBox.setCurrentNode(lhWhiteNode) if rhWhiteNode: self.rightWhiteCBox.setCurrentNode(rhWhiteNode) if rhPialNode: self.rightPialCBox.setCurrentNode(rhPialNode) if lhPialNode: self.leftPialCBox.setCurrentNode(lhPialNode) if reconFileNode: self.fiducialsCBox.setCurrentNode(reconFileNode) #### GMPI Threshold Slider self.gmpiSlider = qt.QSlider(qt.Qt.Horizontal) self.gmpiSlider.setMinimum(-9) self.gmpiSlider.setMaximum(9) self.gmpiSlider.setValue(-3) #### GMPI Spin Box self.gmpiSpinBox = qt.QDoubleSpinBox() self.gmpiSpinBox.setRange(-1, 1) self.gmpiSpinBox.setSingleStep(0.1) self.gmpiSpinBox.setValue(float(self.gmpiSlider.value) / 10) #### GMPI Slider e SpinBox Layout # self.gmpiverticalLayout = qt.QHBoxLayout() # # self.gmpiverticalLayout.addWidget(self.gmpiSlider) # self.gmpiverticalLayout.addWidget(self.gmpiSpinBox) # self.gmpiFL.addRow("GMPI Threshold : ", self.gmpiverticalLayout) # GMPI Computation Detection button self.gmpiPB = qt.QPushButton("Apply") self.gmpiPB.toolTip = "Run the algorithm." self.gmpiPB.enabled = True # Create montage files self.montagePB = qt.QPushButton("Create Montage") self.montagePB.toolTip = "Create Montage" self.montagePB.enabled = True #### Aggiungo il bottone al layout self.gmpiFL.addRow(self.gmpiPB) # self.gmpiFL.addRow(self.montagePB) # connections self.gmpiPB.connect('clicked(bool)', self.onGMPIComputation)