def setup(self): self.tableAreaWidget = qt.QWidget() self.layout.addWidget(self.tableAreaWidget) self.tableLayout = qt.QVBoxLayout(self.tableAreaWidget) label = qt.QLabel('Clinical Data') #self.tableLayout.addWidget(label) self.clinicalDataTableWidget = qt.QTableWidget() self.tableLayout.addWidget(self.clinicalDataTableWidget) verticalheader = self.clinicalDataTableWidget.verticalHeader() verticalheader.setDefaultSectionSize(20) self.buttonsWidget = qt.QWidget() self.buttonsLayout = qt.QHBoxLayout(self.buttonsWidget) self.layout.addWidget(self.buttonsWidget) self.accessLabel = qt.QLabel('') self.buttonsLayout.addWidget(self.accessLabel) self.buttonsLayout.addStretch(1) self.updateButton = qt.QPushButton('Update Cache') self.updateButton.toolTip = 'Connect to cBioPortal and update the data' self.buttonsLayout.addWidget(self.updateButton) self.closeButton = qt.QPushButton('Close') self.buttonsLayout.addWidget(self.closeButton) # Connections self.updateButton.connect('clicked(bool)', self.onUpdateButton) self.closeButton.connect('clicked(bool)', self.onCloseButton)
def displaySearchResults( self, searchResults ): # look into highlighting query rows or another option to remove session numbers # Add a table with all the search results searchResultsTable = qt.QTableWidget() searchResultsTable.setWindowTitle( "Sessions" ) searchResultsTable.resize( 6 * SEARCH_TABLE_ID_COLUMN_WIDTH, 4 * SEARCH_TABLE_ID_COLUMN_WIDTH ) searchResultsTable.setRowCount( len( searchResults ) ) searchResultsTable.setColumnCount( SEARCH_TABLE_NUMBER_OF_COLUMNS ) searchResultsTable.setHorizontalHeaderItem( 0, qt.QTableWidgetItem( "User ID" ) ) searchResultsTable.setColumnWidth( 0, SEARCH_TABLE_ID_COLUMN_WIDTH ) searchResultsTable.setHorizontalHeaderItem( 1, qt.QTableWidgetItem( "Study ID" ) ) searchResultsTable.setColumnWidth( 1, SEARCH_TABLE_ID_COLUMN_WIDTH ) searchResultsTable.setHorizontalHeaderItem( 2, qt.QTableWidgetItem( "Trial ID" ) ) searchResultsTable.setColumnWidth( 2, SEARCH_TABLE_ID_COLUMN_WIDTH ) searchResultsTable.setHorizontalHeaderItem( 3, qt.QTableWidgetItem( "Skill Level" ) ) searchResultsTable.setColumnWidth( 3, SEARCH_TABLE_ID_COLUMN_WIDTH ) searchResultsTable.setHorizontalHeaderItem( 4, qt.QTableWidgetItem( "Date" ) ) searchResultsTable.setColumnWidth( 4, 2 * SEARCH_TABLE_ID_COLUMN_WIDTH ) for row in range( len( searchResults ) ): for col in range( SEARCH_TABLE_NUMBER_OF_COLUMNS ): searchResultsTable.setItem( row, col, qt.QTableWidgetItem( searchResults[ row ][ col ] ) ) searchResultsTable.show() searchResultsTable.connect( "cellDoubleClicked(int,int)", partial( self.onLoadSession, searchResultsTable, searchResults ) )
def addTableWidget(self): self.tableWidgetBox = qt.QGroupBox() layout = qt.QHBoxLayout() self.tableWidgetBox.setLayout(layout) self.tableWidgetBox.setStyleSheet('QGroupBox{border:0;}') self.tableWidget = qt.QTableWidget() self.tableWidget.setStyleSheet('QGroupBox{border:0;}') self.tableWidget.horizontalScrollBar().setEnabled(True) self.tableWidget.setHorizontalScrollBarPolicy(1) self.tableWidget.setVerticalScrollBarPolicy(1) #layout.setColumnMinimumWidth(0,340) #layout.setRowMinimumHeight(0,100) #layout.setGeometry (qt.QRect(0, 0, 340, 100)) layout.addWidget(self.tableWidget) #self.tableWidget.setGeometry (qt.QRect(0, 0, 400, 200)) #self.tableWidget.setMinimumHeight(200) #self.tableWidget.setMinimumWidth(300) self.tableWidget.setObjectName('tableWidget') self.tableWidget.setColumnCount(2) self.tableWidget.setRowCount(2) #self.tableWidget.resizeRowsToContents() #self.tableWidget.resizeColumnsToContents() self.tableWidget.setHorizontalHeaderLabels( "Venous;Ventricle".split(";")) self.tableWidget.setVerticalHeaderLabels("Serial1;Serial2".split(";"))
def setupTargetTable(self): self.table = qt.QTableWidget(0, 2) self.table.setSelectionBehavior(qt.QAbstractItemView.SelectRows) self.table.setSelectionMode(qt.QAbstractItemView.SingleSelection) self.table.setMaximumHeight(200) self.table.horizontalHeader().setStretchLastSection(True) self.resetTable() self.layout().addWidget(self.table)
def __init__(self,parent, width=350,height=100): self.widget = qt.QTableWidget(parent) self.widget.setMinimumHeight(height) self.widget.setMinimumWidth(width) self.width = width self.height = height self.items = [] self.loadables = {} self.setLoadables([])
def build_process_setup(self): self.processTable = qt.QTableWidget(0, 1) self.processTable.setEditTriggers(qt.QAbstractItemView.NoEditTriggers) self.processTable.setSelectionBehavior(qt.QAbstractItemView.SelectRows) self.processTable.horizontalHeader().hide() self.processTable.horizontalHeader().setSectionResizeMode( 0, qt.QHeaderView.Stretch) self.processTable.setSizePolicy(qt.QSizePolicy.Minimum, qt.QSizePolicy.Minimum) self.processTable.setMaximumHeight(70) self.processTools = qt.QFrame() box = qt.QHBoxLayout(self.processTools) box.addWidget( InterfaceTools.build_button( 'Add Custom Elastix', lambda: self.click_add_registration_step( RegistrationType.CUSTOM_ELASTIX))) box.addWidget( InterfaceTools.build_button( 'Add Custom BRAINS', lambda: self.click_add_registration_step(RegistrationType. CUSTOM_BRAINS), tooltip='transformType : Rigid' + '\n' + 'samplingPercentage : 1.0' + '\n' + 'initialTransformMode : off' + '\n' + 'maskProcessingMode : NOMASK' + '\n' + 'costMetric : NC' + '\n' + 'numberOfIterations : 1000' + '\n' + 'minimumStepLength : 0.0000001' + '\n' + 'maximumStepLength : 0.001' + '\n' + 'skewScale : 1.0' + '\n' + 'reproportionScale : 1.0' + '\n' + 'relaxationFactor : 0.5' + '\n' + 'translationScale : 1.0')) b = InterfaceTools.build_button('Clear', self.click_clear_registration_step) b.setFixedWidth(73) box.addWidget(b) box.setContentsMargins(0, 0, 0, 0) layout = qt.QFormLayout() layout.addRow("Registration Steps:", self.processTable) layout.addWidget(self.processTools) layout.setMargin(10) return layout
def build_volume_pair_table(self): self.volumeTable = qt.QTableWidget(0, 3) self.volumeTable.setEditTriggers(qt.QAbstractItemView.NoEditTriggers) self.volumeTable.setHorizontalHeaderLabels( ["Fixed Volume", "Moving Volume", "Status"]) self.volumeTable.verticalHeader().setFixedWidth(30) self.volumeTable.verticalHeader().setSectionResizeMode( qt.QHeaderView.Fixed) self.volumeTable.horizontalHeader().setSectionResizeMode( 0, qt.QHeaderView.Stretch) self.volumeTable.horizontalHeader().setSectionResizeMode( 1, qt.QHeaderView.Stretch) self.volumeTable.setColumnWidth(2, 70) self.volumeTable.setSelectionBehavior(qt.QAbstractItemView.SelectRows) self.volumeTable.connect('itemSelectionChanged()', self.update_selection) layout = qt.QVBoxLayout() layout.addWidget(self.volumeTable) layout.setMargin(10) return layout
def setup(self): # Instantiate and connect widgets ... ScriptedLoadableModuleWidget.setup(self) #self.logic = CIP_CalciumScoringLogic() # # Parameters Area # parametersCollapsibleButton = ctk.ctkCollapsibleButton() parametersCollapsibleButton.text = "Parameters" self.layout.addWidget(parametersCollapsibleButton) # Layout within the dummy collapsible button parametersFormLayout = qt.QFormLayout(parametersCollapsibleButton) # # target volume selector # self.inputSelector = slicer.qMRMLNodeComboBox() self.inputSelector.nodeTypes = ( ("vtkMRMLScalarVolumeNode"), "" ) self.inputSelector.addEnabled = False self.inputSelector.removeEnabled = False self.inputSelector.noneEnabled = False self.inputSelector.showHidden = False self.inputSelector.showChildNodeTypes = False self.inputSelector.setMRMLScene( slicer.mrmlScene ) self.inputSelector.setToolTip( "Pick the input to the algorithm." ) parametersFormLayout.addRow("Target Volume: ", self.inputSelector) self.inputSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onVolumeChanged) self.volumeNode = self.inputSelector.currentNode() # # calcification type # # self.calcificationTypeBox = qt.QComboBox() # self.calcificationTypeBox.addItem("Heart") # self.calcificationTypeBox.addItem("Aorta") # parametersFormLayout.addRow("Region", self.calcificationTypeBox) # self.calcificationTypeBox.connect("currentIndexChanged(int)", self.onTypeChanged) self.ThresholdRange = ctk.ctkRangeWidget() self.ThresholdRange.minimum = 0 self.ThresholdRange.maximum = 2000 self.ThresholdRange.setMinimumValue(self.ThresholdMin) self.ThresholdRange.setMaximumValue(self.ThresholdMax) self.ThresholdRange.connect("minimumValueChanged(double)", self.onThresholdMinChanged) self.ThresholdRange.connect("maximumValueChanged(double)", self.onThresholdMaxChanged) parametersFormLayout.addRow("Threshold Value", self.ThresholdRange) self.ThresholdRange.setMinimumValue(self.ThresholdMin) self.ThresholdRange.setMaximumValue(self.ThresholdMax) self.LesionSizeRange= ctk.ctkRangeWidget() self.LesionSizeRange.minimum = 0.5 self.LesionSizeRange.maximum = 1000 self.LesionSizeRange.setMinimumValue(self.MinimumLesionSize) self.LesionSizeRange.setMaximumValue(self.MaximumLesionSize) self.LesionSizeRange.connect("minimumValueChanged(double)", self.onMinSizeChanged) self.LesionSizeRange.connect("maximumValueChanged(double)", self.onMaxSizeChanged) parametersFormLayout.addRow("Lesion Size (mm^3)", self.LesionSizeRange) self.LesionSizeRange.setMinimumValue(self.MinimumLesionSize) self.LesionSizeRange.setMaximumValue(self.MaximumLesionSize) self.scoreField=dict() for sr in self.summary_reports: self.scoreField[sr] = qt.QLineEdit() self.scoreField[sr].setText(0) parametersFormLayout.addRow("Total "+sr, self.scoreField[sr]) # # Update button and Select Table # self.updateButton = qt.QPushButton("Update") self.updateButton.toolTip = "Update calcium score computation" self.updateButton.enabled = True self.updateButton.setFixedSize(100, 50) #parametersFormLayout.addRow("", self.updateButton) self.updateButton.connect('clicked()', self.onUpdate) # # Select table # self.selectLabels = qt.QTableWidget() #self.selectLabels.horizontalHeader().hide() self.selectLabels.verticalHeader().hide() self.selectLabels.setColumnCount(6) self.selectLabels.itemClicked.connect(self.handleItemClicked) #Add row with columns name col_names=["","Agatston Score","Mass Score","Volume (mm^3)","Mean HU","Max HU"] self.selectLabels.setHorizontalHeaderLabels(col_names) parametersFormLayout.addRow(self.updateButton, self.selectLabels) # # Save Widget Area # #self.saveCollapsibleButton = ctk.ctkCollapsibleButton() #self.saveCollapsibleButton.text = "Saving" #self.layout.addWidget(self.saveCollapsibleButton) self.reportsWidget = CaseReportsWidget(self.moduleName, self.columnsDict, parentWidget=self.parent) self.reportsWidget.setup() self.reportsWidget.showPrintButton(False) self.reportsWidget.addObservable(self.reportsWidget.EVENT_SAVE_BUTTON_CLICKED, self.onSaveReport) # # ROI Area # self.roiCollapsibleButton = ctk.ctkCollapsibleButton() self.roiCollapsibleButton.text = "ROI" self.roiCollapsibleButton.setChecked(False) self.layout.addWidget(self.roiCollapsibleButton) # Layout within the dummy collapsible button roiFormLayout = qt.QFormLayout(self.roiCollapsibleButton) # # ROI # self.ROIWidget = slicer.qMRMLAnnotationROIWidget() self.roiNode = slicer.vtkMRMLAnnotationROINode() slicer.mrmlScene.AddNode(self.roiNode) self.ROIWidget.setMRMLAnnotationROINode(self.roiNode) roiFormLayout.addRow("", self.ROIWidget) #self.roiNode.AddObserver("ModifiedEvent", self.onROIChangedEvent, 1) # Add vertical spacer self.layout.addStretch(1) # Add temp nodes self.croppedNode=slicer.vtkMRMLScalarVolumeNode() self.croppedNode.SetHideFromEditors(1) slicer.mrmlScene.AddNode(self.croppedNode) self.labelsNode=slicer.vtkMRMLLabelMapVolumeNode() slicer.mrmlScene.AddNode(self.labelsNode) if self.inputSelector.currentNode(): self.onVolumeChanged(self.inputSelector.currentNode())
def __init__(self,parent): self.widget = qt.QTableWidget(parent,width=350,height=300) self.items = [] self.setHeader(None)
def setup(self): # this is the function that implements all GUI ScriptedLoadableModuleWidget.setup(self) # This sets the view being used to the red view only slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutOneUpRedSliceView) l = slicer.modules.createmodels.logic() self.needleModel = l.CreateNeedle(150, 0.4, 0, False) #This code block creates a collapsible button #This defines which type of button you are using self.usContainer = ctk.ctkCollapsibleButton() #This is what the button will say self.usContainer.text = "Ultrasound Information" #Thiss actually creates that button self.layout.addWidget(self.usContainer) #This creates a variable that describes layout within this collapsible button self.usLayout = qt.QFormLayout(self.usContainer) #This descirbes the type of widget self.inputIPLineEdit = qt.QLineEdit() #This sets a placehoder example of what should be inputted to the line edit self.inputIPLineEdit.setPlaceholderText("127.0.0.1") #This is the help tooltip self.inputIPLineEdit.toolTip = "Put the IP address of your ultrasound device here" #This is the text that is input inot the line self.IPLabel = qt.QLabel("Server IP:") if slicer.mrmlScene.GetNodesByClass("vtkMRMLSequenceNode").GetNumberOfItems() == 0: self.usLayout.addRow(self.IPLabel, self.inputIPLineEdit) #This code block is the exact same as the one above only it asks for the server port self.layout.addWidget(self.usContainer) self.inputPortLineEdit = qt.QLineEdit() self.inputPortLineEdit.setPlaceholderText("18944") self.inputPortLineEdit.setValidator(qt.QIntValidator()) self.inputPortLineEdit.toolTip = "Put the Port of your ultrasound device here" self.portLabel = qt.QLabel("Sever Port:") if slicer.mrmlScene.GetNodesByClass("vtkMRMLSequenceNode").GetNumberOfItems() == 0: self.usLayout.addRow(self.portLabel, self.inputPortLineEdit) #This is a push button self.connectButton = qt.QPushButton() self.connectButton.setDefault(False) #This button says connect self.connectButton.text = "Connect" #help tooltip that explains the funciton self.connectButton.toolTip = "Connects to Ultrasound" #adds the widget to the layout if slicer.mrmlScene.GetNodesByClass("vtkMRMLSequenceNode").GetNumberOfItems() == 0: self.usLayout.addWidget(self.connectButton) # Combobox for image selection self.imageSelector = slicer.qMRMLNodeComboBox() self.imageSelector.nodeTypes = ["vtkMRMLScalarVolumeNode"] self.imageSelector.selectNodeUponCreation = True self.imageSelector.addEnabled = False self.imageSelector.removeEnabled = False self.imageSelector.noneEnabled = True self.imageSelector.showHidden = False self.imageSelector.showChildNodeTypes = False self.imageSelector.setMRMLScene( slicer.mrmlScene ) self.imageSelector.setToolTip( "Pick the image to be used." ) self.usLayout.addRow("US Volume: ", self.imageSelector) #add combo box for linear transform node self.TransformSelector = slicer.qMRMLNodeComboBox() self.TransformSelector.nodeTypes = ["vtkMRMLLinearTransformNode"] self.TransformSelector.selectNodeUponCreation = True self.TransformSelector.addEnabled = False self.TransformSelector.removeEnabled = False self.TransformSelector.noneEnabled = True self.TransformSelector.showHidden = False self.TransformSelector.showChildNodeTypes = False self.TransformSelector.setMRMLScene( slicer.mrmlScene ) self.TransformSelector.setToolTip( "Pick the transform representing the straw line." ) self.usLayout.addRow("Tip to Probe: ", self.TransformSelector) self.calibrationContainer = ctk.ctkCollapsibleButton() #This is what the button will say self.calibrationContainer.text = "Calibration Parameters" #Thiss actually creates that button self.layout.addWidget(self.calibrationContainer) #This creates a variable that describes layout within this collapsible button self.calibrationLayout = qt.QFormLayout(self.calibrationContainer) self.segLabel = qt.QLabel() self.calibrationLayout.addRow(qt.QLabel("Type of segmentation:"), self.segLabel) self.recordContainer = ctk.ctkCollapsibleButton() #This is what the button will say self.recordContainer.text = "Recording Options" #Thiss actually creates that button #This creates a variable that describes layout within this collapsible button self.recordLayout = qt.QFormLayout(self.recordContainer) self.RecordButton = qt.QPushButton() self.RecordButton.text = "Start Recording" self.recordLayout.addWidget(self.RecordButton) self.StopRecordButton = qt.QPushButton() self.StopRecordButton.text = "Stop Recording" self.recordLayout.addWidget(self.StopRecordButton) self.pathInput = qt.QLineEdit() self.pathInput.setPlaceholderText("Enter the path to save files to") self.pathText = qt.QLabel("File Path:") self.recordLayout.addRow(self.pathText, self.pathInput) self.SaveRecordButton = qt.QPushButton() self.SaveRecordButton.text = "Save Recording" self.recordLayout.addWidget(self.SaveRecordButton) # This creates another collapsible button self.fiducialContainer = ctk.ctkCollapsibleButton() self.fiducialContainer.text = "Registration" self.fiducialLayout = qt.QFormLayout(self.fiducialContainer) #This is the exact same as the code block below but it freezes the US to capture a screenshot self.freezeButton = qt.QPushButton() if slicer.mrmlScene.GetNodesByClass("vtkMRMLSequenceNode").GetNumberOfItems() == 0: self.freezeButton.text = "Freeze" else: self.freezeButton.text = "Place Fiducial" self.freezeButton.toolTip = "Freeze the ultrasound image for fiducial placement" self.fiducialLayout.addRow(self.freezeButton) self.shortcut = qt.QShortcut(qt.QKeySequence('f'), slicer.util.mainWindow()) self.numFidLabel = qt.QLabel() self.fiducialLayout.addRow(qt.QLabel("Fiducials collected:"), self.numFidLabel) self.transformTable = qt.QTableWidget() self.transTableItem = qt.QTableWidgetItem() self.fidError = qt.QLabel() self.transformTable.setRowCount(4) self.transformTable.setColumnCount(4) self.transformTable.horizontalHeader().hide() self.transformTable.verticalHeader().hide() self.transformTable.setItem(0,0, qt.QTableWidgetItem("1")) self.transformTable.setItem(0,1, qt.QTableWidgetItem("0")) self.transformTable.setItem(0,2, qt.QTableWidgetItem("0")) self.transformTable.setItem(0,3, qt.QTableWidgetItem("0")) self.transformTable.setItem(1,0, qt.QTableWidgetItem("0")) self.transformTable.setItem(1,1, qt.QTableWidgetItem("1")) self.transformTable.setItem(1,2, qt.QTableWidgetItem("0")) self.transformTable.setItem(1,3, qt.QTableWidgetItem("0")) self.transformTable.setItem(2,0, qt.QTableWidgetItem("0")) self.transformTable.setItem(2,1, qt.QTableWidgetItem("0")) self.transformTable.setItem(2,2, qt.QTableWidgetItem("1")) self.transformTable.setItem(2,3, qt.QTableWidgetItem("0")) self.transformTable.setItem(3,0, qt.QTableWidgetItem("0")) self.transformTable.setItem(3,1, qt.QTableWidgetItem("0")) self.transformTable.setItem(3,2, qt.QTableWidgetItem("0")) self.transformTable.setItem(3,3, qt.QTableWidgetItem("1")) self.transformTable.setSizePolicy(qt.QSizePolicy.Minimum, qt.QSizePolicy.MinimumExpanding) self.copyIcon =qt.QIcon(":Icons/Medium/SlicerEditCopy.png") self.copyButton = qt.QPushButton() self.copyButton.setIcon(self.copyIcon) self.copyButton.toolTip = "Copy" self.copyButton.setMaximumWidth(64) self.copyHbox = qt.QHBoxLayout() self.copyHbox.addWidget(self.copyButton) self.copyButton.enabled = False if self.numFidLabel >= 2: self.copyButton.enabled = True self.fiducialLayout.addRow(qt.QLabel("Image to probe transform:")) self.fiducialLayout.addRow(self.transformTable) # Add vertical spacer self.layout.addStretch(1) # Add vertical spacer self.layout.addStretch(1) self.fiducialLayout.addRow("Copy:", self.copyHbox) self.validationContainer = ctk.ctkCollapsibleButton() self.validationContainer.text = "Validation" self.validationLayout = qt.QFormLayout(self.validationContainer) self.visualizeButton = qt.QPushButton('Show 3D Scene') self.visualizeButton.toolTip = "This button enables the 3D view for visual validation" self.validationLayout.addRow(self.visualizeButton) self.visualizeButton.connect('clicked(bool)', self.onVisualizeButtonClicked) self.resetButton = qt.QPushButton('Reset') self.resetButton.setDefault(False) self.resetButton.toolTip = "This Button Resets the Module" self.validationLayout.addRow(self.resetButton) # Add the containers to the parent self.layout.addWidget(self.usContainer) self.layout.addWidget(self.calibrationContainer) if slicer.mrmlScene.GetNodesByClass("vtkMRMLSequenceNode").GetNumberOfItems() == 0: self.layout.addWidget(self.recordContainer) self.layout.addWidget(self.fiducialContainer) #self.layout.addWidget(self.transformContainer) self.layout.addWidget(self.validationContainer) # Add vertical spacer self.layout.addStretch(1) # Connections if slicer.mrmlScene.GetNodesByClass("vtkMRMLSequenceNode").GetNumberOfItems() == 0: self.connectButton.connect('clicked(bool)', self.onConnectButtonClicked) self.freezeButton.connect('clicked(bool)', self.onConnectButtonClicked) self.shortcut.connect('activated()', self.onConnectButtonClicked) else: self.shortcut.connect('activated()', self.onFiducialClicked) self.freezeButton.connect('clicked(bool)', self.onFiducialClicked) self.RecordButton.connect('clicked(bool)', self.onRecordButtonClicked) self.StopRecordButton.connect('clicked(bool)', self.onStopRecordButtonClicked) self.SaveRecordButton.connect('clicked(bool)', self.onSaveRecordButtonClicked) self.copyButton.connect('clicked(bool)', self.onCopyButtonClicked) self.inputIPLineEdit.connect('textChanged(QString)', self.onInputChanged) self.inputPortLineEdit.connect('textChanged(QString)', self.onInputChanged) self.imageSelector.connect('currentNodeChanged(vtkMRMLNode*)', self.onImageChanged) self.TransformSelector.connect('currentNodeChanged(vtkMRMLNode*)', self.onTransformChanged) self.resetButton.connect('clicked(bool)', self.onResetButtonClicked) # Disable buttons until conditions are met self.connectButton.setEnabled(True) if slicer.mrmlScene.GetNodesByClass("vtkMRMLSequenceNode").GetNumberOfItems() == 0: self.freezeButton.setEnabled(False) self.StopRecordButton.setEnabled(False) self.sceneObserverTag = slicer.mrmlScene.AddObserver(slicer.mrmlScene.NodeAddedEvent, self.onNodeAdded)
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): ScriptedLoadableModuleWidget.setup(self) # Instantiate and connect widgets ... #################### # For debugging # # Reload and Test area reloadCollapsibleButton = ctk.ctkCollapsibleButton() reloadCollapsibleButton.text = "Reload && Test" reloadCollapsibleButton.collapsed = True self.layout.addWidget(reloadCollapsibleButton) reloadFormLayout = qt.QFormLayout(reloadCollapsibleButton) # reload button # (use this during development, but remove it when delivering # your module to users) self.reloadButton = qt.QPushButton("Reload") self.reloadButton.toolTip = "Reload this module." self.reloadButton.name = "PathCollisionAnalysis Reload" reloadFormLayout.addWidget(self.reloadButton) self.reloadButton.connect('clicked()', self.onReload) # #################### # # Main area # mainCollapsibleButton = ctk.ctkCollapsibleButton() mainCollapsibleButton.text = "Collision Analysis" mainCollapsibleButton.collapsed = False self.layout.addWidget(mainCollapsibleButton) mainFormLayout = qt.QFormLayout(mainCollapsibleButton) # - input fiducials (trajectory) selector self.inputFiducialSelector = slicer.qMRMLNodeComboBox() self.inputFiducialSelector.nodeTypes = ["vtkMRMLMarkupsFiducialNode"] self.inputFiducialSelector.selectNodeUponCreation = True self.inputFiducialSelector.addEnabled = True self.inputFiducialSelector.removeEnabled = True self.inputFiducialSelector.noneEnabled = False self.inputFiducialSelector.showHidden = False self.inputFiducialSelector.showChildNodeTypes = False self.inputFiducialSelector.setMRMLScene(slicer.mrmlScene) self.inputFiducialSelector.setToolTip("Pick the trajectory.") mainFormLayout.addRow("Trajectory: ", self.inputFiducialSelector) # - Model selector self.inputModelHierarchySelector = slicer.qMRMLNodeComboBox() self.inputModelHierarchySelector.nodeTypes = [ "vtkMRMLModelHierarchyNode" ] self.inputModelHierarchySelector.selectNodeUponCreation = True self.inputModelHierarchySelector.addEnabled = True self.inputModelHierarchySelector.removeEnabled = True self.inputModelHierarchySelector.noneEnabled = False self.inputModelHierarchySelector.showHidden = False self.inputModelHierarchySelector.showChildNodeTypes = False self.inputModelHierarchySelector.setMRMLScene(slicer.mrmlScene) self.inputModelHierarchySelector.setToolTip("Select a 3D Model") mainFormLayout.addRow("Model:", self.inputModelHierarchySelector) self.modelNode = None #self.inputModelHierarchySelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onModelSelected) self.intersectionTable = qt.QTableWidget(1, 6) self.intersectionTable.setSelectionBehavior( qt.QAbstractItemView.SelectRows) self.intersectionTable.setSelectionMode( qt.QAbstractItemView.SingleSelection) self.intersectionTableHeader = [ "Model", "Entry 1", "Entry 2", "Length", "Curvature 1", "Curvature 2" ] self.intersectionTable.setHorizontalHeaderLabels( self.intersectionTableHeader) self.intersectionTable.horizontalHeader().setStretchLastSection(True) mainFormLayout.addWidget(self.intersectionTable) # # Apply Button # self.applyButton = qt.QPushButton("Apply") self.applyButton.toolTip = "Run the algorithm." self.applyButton.enabled = False mainFormLayout.addRow(self.applyButton) # connections self.applyButton.connect('clicked(bool)', self.onApplyButton) self.inputModelHierarchySelector.connect( "currentNodeChanged(vtkMRMLNode*)", self.onSelect) self.inputFiducialSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelect) # Add vertical spacer self.layout.addStretch(1) # Refresh Apply button state self.onSelect() # variables self.objectIDs = None self.objectNames = None self.normalVectors = None self.entryAngles = None self.totalLengthInObject = None self.curvatures = None self.radiusNormals = None
def setup(self): ScriptedLoadableModuleWidget.setup(self) # 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) # # input volume selector # self.inputSelector = slicer.qMRMLNodeComboBox() self.inputSelector.nodeTypes = ["vtkMRMLScalarVolumeNode"] self.inputSelector.selectNodeUponCreation = True self.inputSelector.addEnabled = False self.inputSelector.removeEnabled = False self.inputSelector.noneEnabled = False self.inputSelector.showHidden = False self.inputSelector.showChildNodeTypes = False self.inputSelector.setMRMLScene( slicer.mrmlScene ) self.inputSelector.setToolTip( "Pick the input to the algorithm." ) parametersFormLayout.addRow("Input Volume: ", self.inputSelector) # # Spawn table view for common DICOM tags and their values # self.taglist = { "Patient ID" : "N/A", "Patient Name" : "N/A", "Patient Birth Date" : "N/A", "Patient Sex" : "N/A", "Study ID" : "N/A", "Study Date" : "N/A", "Study Description" : "N/A", "Study Instance UID" : "N/A", "Series Number" : "N/A", "Modality" : "N/A", "Series Date" : "N/A", "Series Description" : "N/A", "Protocol Name" : "N/A", "Body Part Examined" : "N/A", "Patient Position" : "N/A", "Columns" : "N/A", "Rows" : "N/A", "Number of Slices" : "N/A", "Pixel Spacing" : "N/A", "Slice Thickness" : "N/A", "Spacing Between Slices" : "N/A", "Voxel Size" : "N/A", "Field of View" : "N/A", "Series Instance UID" : "N/A", } self.table = qt.QTableWidget(parametersCollapsibleButton) self.table.setColumnCount(2) #self.table.setRowCount(24) self.table.setRowCount(len(self.taglist)) self.table.setHorizontalHeaderLabels(["Attribute", "Value"]) # This must follow table resize i = 0 for key, value in self.taglist.iteritems(): self.table.setItem(i, 0, qt.QTableWidgetItem(key)) self.table.setItem(i, 1, qt.QTableWidgetItem(value)) i = i + 1 #for i in range(25): # self.table.setItem(i, 1, qt.QTableWidgetItem("N/A")) self.table.resizeColumnsToContents() self.table.resizeRowsToContents() self.table.setAlternatingRowColors(True) self.table.setShowGrid(False) self.table.verticalHeader().hide() parametersFormLayout.addRow("Volume Info:", self.table) # connections self.inputSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelect) # Add vertical spacer self.layout.addStretch(1) # Refresh Table view state self.onSelect(self.inputSelector.currentNode())
def setup(self): ScriptedLoadableModuleWidget.setup(self) # Instantiate and connect widgets ... self.pbucLogic = PointerBasedUSCalibrationLogic() # Have reference to an instance of the logic # # Tracked ultrasound playback toolbox # self.playToolBox = qt.QToolBox() self.layout.addWidget( self.playToolBox ) # # Real-time playback # self.realTimeFrame = qt.QFrame( self.playToolBox ) self.realTimeLayout = qt.QVBoxLayout( self.realTimeFrame ) self.connectorNodeSelector = slicer.qMRMLNodeComboBox() self.connectorNodeSelector.nodeTypes = [ "vtkMRMLIGTLConnectorNode" ] self.connectorNodeSelector.addEnabled = False self.connectorNodeSelector.removeEnabled = False self.connectorNodeSelector.noneEnabled = False self.connectorNodeSelector.showHidden = False self.connectorNodeSelector.showChildNodeTypes = False self.connectorNodeSelector.setMRMLScene( slicer.mrmlScene ) self.connectorNodeSelector.setToolTip( "Select the connector node for playback." ) self.realTimeLayout.addWidget( self.connectorNodeSelector ) self.freezeButton = qt.QPushButton( "Freeze" ) self.freezeButton.setToolTip( "Freeze the connection." ) self.realTimeLayout.addWidget( self.freezeButton ) # # Recorded sequence playback # self.sequenceFrame = qt.QFrame( self.playToolBox ) self.sequenceLayout = qt.QVBoxLayout( self.sequenceFrame ) self.sequenceBrowserNodeSelector = slicer.qMRMLNodeComboBox() self.sequenceBrowserNodeSelector.nodeTypes = [ "vtkMRMLSequenceBrowserNode" ] self.sequenceBrowserNodeSelector.addEnabled = False self.sequenceBrowserNodeSelector.removeEnabled = False self.sequenceBrowserNodeSelector.noneEnabled = False self.sequenceBrowserNodeSelector.showHidden = False self.sequenceBrowserNodeSelector.showChildNodeTypes = False self.sequenceBrowserNodeSelector.setMRMLScene( slicer.mrmlScene ) self.sequenceBrowserNodeSelector.setToolTip( "Select the sequence browser node for playback." ) self.sequenceLayout.addWidget( self.sequenceBrowserNodeSelector ) self.sequenceBrowserPlayWidget = slicer.qMRMLSequenceBrowserPlayWidget() # TODO: Somehow disable the recording button without changing sequences' recording states self.sequenceBrowserPlayWidget.setMRMLSequenceBrowserNode( self.sequenceBrowserNodeSelector.currentNode() ) self.sequenceLayout.addWidget( self.sequenceBrowserPlayWidget ) self.sequenceBrowserSeekWidget = slicer.qMRMLSequenceBrowserSeekWidget() self.sequenceBrowserSeekWidget.setMRMLSequenceBrowserNode( self.sequenceBrowserNodeSelector.currentNode() ) self.sequenceLayout.addWidget( self.sequenceBrowserSeekWidget ) # Add the playback modes to the tool box self.playToolBox.addItem( self.realTimeFrame, "Real-time" ) self.playToolBox.addItem( self.sequenceFrame, "Sequence" ) # # Points group box # self.pointGroupBox = qt.QGroupBox() self.pointGroupBox.setTitle( "Points" ) self.layout.addWidget( self.pointGroupBox ) # Layout within the group box self.pointGroupBoxLayout = qt.QHBoxLayout( self.pointGroupBox ) # Mark point self.markPointButton = qt.QPushButton( "Mark Point" ) self.markPointButton.setIcon( qt.QIcon( ":/Icons/MarkupsMouseModePlace.png" ) ) self.markPointButton.setToolTip( "Start placing a point on the ultrasound image." ) self.pointGroupBoxLayout.addWidget( self.markPointButton ) # Undo self.undoPointsButton = qt.QPushButton( "" ) self.undoPointsButton.setIcon( qt.QIcon( ":/Icons/Small/SlicerUndo.png" ) ) self.undoPointsButton.setSizePolicy( qt.QSizePolicy.Fixed, qt.QSizePolicy.Fixed ) self.undoPointsButton.setToolTip( "Remove the most recently placed point." ) self.pointGroupBoxLayout.addWidget( self.undoPointsButton ) # Reset self.resetPointsButton = qt.QPushButton( "" ) self.resetPointsButton.setIcon( qt.QApplication.style().standardIcon( qt.QStyle.SP_DialogResetButton ) ) self.resetPointsButton.setSizePolicy( qt.QSizePolicy.Fixed, qt.QSizePolicy.Fixed ) self.resetPointsButton.setToolTip( "Clear all points." ) self.pointGroupBoxLayout.addWidget( self.resetPointsButton ) # # Result label # self.calibrationResultLabel = qt.QLabel() self.calibrationResultLabel.setText( "No calibration parameters selected." ) self.calibrationResultLabel.setToolTip( "Output from the calibration." ) self.layout.addWidget( self.calibrationResultLabel ) # # Advanced area # self.advancedCollapsibleButton = ctk.ctkCollapsibleButton() self.advancedCollapsibleButton.setText( "Advanced" ) self.advancedCollapsibleButton.collapsed = True self.layout.addWidget( self.advancedCollapsibleButton ) # Layout within the collapsible button self.advancedLayout = qt.QFormLayout( self.advancedCollapsibleButton ) # Mark point self.applyButton = qt.QPushButton( "Apply" ) self.applyButton.setToolTip( "Apply the ImageToProbe transform to the ultrasound image." ) self.advancedLayout.addWidget( self.applyButton ) # # Results area # self.resultsCollapsibleButton = ctk.ctkCollapsibleButton() self.resultsCollapsibleButton.setText( "Results" ) self.resultsCollapsibleButton.collapsed = True self.advancedLayout.addWidget( self.resultsCollapsibleButton ) # Layout within the collapsible button self.resultsLayout = qt.QFormLayout( self.resultsCollapsibleButton ) # Results table self.resultsTable = qt.QTableWidget( self.resultsCollapsibleButton ) self.resultsTable.setColumnCount( self.RESULTS_NUM_INDICES ) self.resultsTable.setHorizontalHeaderLabels( [ "Image Points", "Probe Points", "Error", "Delete" ] ) self.resultsTable.horizontalHeader().setResizeMode( qt.QHeaderView.Stretch ) self.resultsTable.horizontalHeader().setResizeMode( self.RESULTS_DELETE_INDEX, qt.QHeaderView.Fixed ) self.resultsLayout.addRow( self.resultsTable ) # # Parameters area # self.parametersCollapsibleButton = ctk.ctkCollapsibleButton() self.parametersCollapsibleButton.setText( "Parameters" ) self.parametersCollapsibleButton.collapsed = True self.advancedLayout.addWidget( self.parametersCollapsibleButton ) # Layout within the collapsible button self.parametersLayout = qt.QVBoxLayout( self.parametersCollapsibleButton ) # Parameters node self.frwNodeSelector = slicer.qMRMLNodeComboBox() self.frwNodeSelector.nodeTypes = [ "vtkMRMLFiducialRegistrationWizardNode" ] self.frwNodeSelector.addEnabled = True self.frwNodeSelector.removeEnabled = True self.frwNodeSelector.noneEnabled = False self.frwNodeSelector.showHidden = False self.frwNodeSelector.showChildNodeTypes = False self.frwNodeSelector.baseName = "UltrasoundCalibration" self.frwNodeSelector.setMRMLScene( slicer.mrmlScene ) self.frwNodeSelector.setToolTip( "Select the ultrasound calibration parameters node." ) self.parametersLayout.addWidget( self.frwNodeSelector ) # # Input group box # self.inputGroupBox = qt.QGroupBox( self.parametersCollapsibleButton ) self.inputGroupBox.setTitle( "Input" ) self.parametersLayout.addWidget( self.inputGroupBox ) # Layout within the group box self.inputGroupBoxLayout = qt.QFormLayout( self.inputGroupBox ) # US image selector self.usImageNodeSelector = slicer.qMRMLNodeComboBox() self.usImageNodeSelector.nodeTypes = [ "vtkMRMLVolumeNode" ] self.usImageNodeSelector.addEnabled = False self.usImageNodeSelector.removeEnabled = False self.usImageNodeSelector.noneEnabled = True self.usImageNodeSelector.showHidden = False self.usImageNodeSelector.showChildNodeTypes = True self.usImageNodeSelector.setMRMLScene( slicer.mrmlScene ) self.usImageNodeSelector.setToolTip( "Select the ultrasound image node." ) self.inputGroupBoxLayout.addRow( "Ultrasound image ", self.usImageNodeSelector ) # StylusTipToProbe selector self.stylusTipToProbeNodeSelector = slicer.qMRMLNodeComboBox() self.stylusTipToProbeNodeSelector.nodeTypes = [ "vtkMRMLLinearTransformNode" ] self.stylusTipToProbeNodeSelector.addEnabled = False self.stylusTipToProbeNodeSelector.removeEnabled = False self.stylusTipToProbeNodeSelector.noneEnabled = True self.stylusTipToProbeNodeSelector.showHidden = False self.stylusTipToProbeNodeSelector.showChildNodeTypes = True self.stylusTipToProbeNodeSelector.setMRMLScene( slicer.mrmlScene ) self.stylusTipToProbeNodeSelector.setToolTip( "Select the StylusTipToProbe node (parent transforms will be applied)." ) self.inputGroupBoxLayout.addRow( "StylusTipToProbe ", self.stylusTipToProbeNodeSelector ) # # Output group box # self.outputGroupBox = qt.QGroupBox( self.parametersCollapsibleButton ) self.outputGroupBox.setTitle( "Output" ) self.parametersLayout.addWidget( self.outputGroupBox ) # Layout within the group box self.outputGroupBoxLayout = qt.QFormLayout( self.outputGroupBox ) # ImageToProbe selector self.imageToProbeNodeSelector = slicer.qMRMLNodeComboBox() self.imageToProbeNodeSelector.nodeTypes = [ "vtkMRMLLinearTransformNode" ] self.imageToProbeNodeSelector.addEnabled = True self.imageToProbeNodeSelector.removeEnabled = False self.imageToProbeNodeSelector.noneEnabled = True self.imageToProbeNodeSelector.renameEnabled = True self.imageToProbeNodeSelector.showHidden = False self.imageToProbeNodeSelector.showChildNodeTypes = True self.imageToProbeNodeSelector.setMRMLScene( slicer.mrmlScene ) self.imageToProbeNodeSelector.setToolTip( "Select the ImageToProbe output node (stores the result of the calibration)." ) self.outputGroupBoxLayout.addRow( "ImageToProbe ", self.imageToProbeNodeSelector ) # # Set up connections # self.freezeButton.connect( "clicked(bool)", self.onFreezeButtonClicked ) self.sequenceBrowserNodeSelector.connect( "currentNodeChanged(vtkMRMLNode*)", self.onSequenceBrowserNodeChanged ) self.frwNodeSelector.connect( "currentNodeChanged(vtkMRMLNode*)", self.onCalibrationNodeChanged ) self.usImageNodeSelector.connect( "currentNodeChanged(vtkMRMLNode*)", self.onUSImageNodeChanged ) self.stylusTipToProbeNodeSelector.connect( "currentNodeChanged(vtkMRMLNode*)", self.onStylusTipToProbeNodeChanged ) self.markPointButton.connect( "clicked(bool)", self.onMarkPointButtonClicked ) self.undoPointsButton.connect( "clicked(bool)", self.onUndoPointsButtonClicked ) self.resetPointsButton.connect( "clicked(bool)", self.onResetPointsButtonClicked ) self.imageToProbeNodeSelector.connect( "currentNodeChanged(vtkMRMLNode*)", self.onImageToProbeNodeChanged ) self.applyButton.connect( "clicked(bool)", self.onApplyOutputTransformToImageClicked ) # # Create a parameters node by default # defaultFRWNode = slicer.vtkMRMLFiducialRegistrationWizardNode() defaultFRWNode.SetName( "UltrasoundCalibration" ) defaultFRWNode.SetScene( slicer.mrmlScene ) slicer.mrmlScene.AddNode( defaultFRWNode ) self.frwNodeSelector.setCurrentNodeID( defaultFRWNode.GetID() ) # Add vertical spacer self.layout.addStretch(1)
def setup(self): ScriptedLoadableModuleWidget.setup(self) self.logic = VisualizationLogic() self.watchDog = None self.trackedToolTipTransform = None # Instantiate and connect widgets ... # # Parameters Area # # watch dog stuff watchDogCollapsibleButton = ctk.ctkCollapsibleButton() watchDogCollapsibleButton.text = "Tracked Instruments" watchDogCollapsibleButton.collapsed = True self.layout.addWidget(watchDogCollapsibleButton) watchDogCollapsibleButton.connect("clicked(bool)", self.onWatchDogCollapsibleButton) watchDogFormLayout = qt.QFormLayout(watchDogCollapsibleButton) self.table = qt.QTableWidget() self.table.setColumnCount(2) header = ['Name', 'Status'] self.table.setHorizontalHeaderLabels(header) watchDogFormLayout.addWidget(self.table) visualizationCollapsibleButton = ctk.ctkCollapsibleButton() visualizationCollapsibleButton.text = "Visualization Tools" visualizationCollapsibleButton.collapsed = True self.layout.addWidget(visualizationCollapsibleButton) visualizationFormLayout = qt.QFormLayout( visualizationCollapsibleButton) # input tool model selector # self.inputSelector = slicer.qMRMLNodeComboBox() self.inputSelector.nodeTypes = ["vtkMRMLModelNode"] self.inputSelector.selectNodeUponCreation = False self.inputSelector.addEnabled = False self.inputSelector.removeEnabled = False self.inputSelector.noneEnabled = True self.inputSelector.showHidden = False self.inputSelector.showChildNodeTypes = False self.inputSelector.renameEnabled = False self.inputSelector.setMRMLScene(slicer.mrmlScene) self.inputSelector.setToolTip("The currently navigated tool") visualizationFormLayout.addRow("Tracking Tool: ", self.inputSelector) # connection self.inputSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onToolNavigated) self.toolViewCheckBox = qt.QCheckBox() self.toolViewCheckBox.checked = 0 self.toolViewCheckBox.setToolTip( "If checked, the views will track the tip of the tool selected") self.toolViewCheckBox.connect('stateChanged(int)', self.onToolViewCheckBox) visualizationFormLayout.addRow("Attach views to tool tip", self.toolViewCheckBox) self.toolErrorCheckBox = qt.QCheckBox() self.toolErrorCheckBox.checked = 0 self.toolErrorCheckBox.setToolTip("If checked, the show error cone") self.toolErrorCheckBox.connect('stateChanged(int)', self.onToolErrorCheckBox) visualizationFormLayout.addRow("Show the Error cone", self.toolErrorCheckBox) # self.screenShotButton = qt.QPushButton("Take Screenshot") self.screenShotButton.toolTip = "Takes screenshot of the procedure display and saves the image in the ?? folder." self.screenShotButton.enabled = True visualizationFormLayout.addRow(self.screenShotButton) # connections self.screenShotButton.connect('clicked(bool)', self.onScreenShotButton) parametersCollapsibleButton = ctk.ctkCollapsibleButton() parametersCollapsibleButton.text = "RFA Generator Parameters" parametersCollapsibleButton.collapsed = True self.layout.addWidget(parametersCollapsibleButton) # Layout within the dummy collapsible button parametersFormLayout = qt.QFormLayout(parametersCollapsibleButton) # # input time self.rfaTime = qt.QSpinBox() self.rfaTime.minimum = 0 self.rfaTime.maximum = 900 self.rfaTime.suffix = 's' self.rfaTime.setValue(900) parametersFormLayout.addRow("Input Ablation Time: ", self.rfaTime) # # output volume selector # self.rfaPower = qt.QSpinBox() self.rfaPower.minimum = -1 self.rfaPower.maximum = 15 self.rfaPower.suffix = 'W' self.rfaPower.setValue(5) parametersFormLayout.addRow("RFA Power: ", self.rfaPower) self.ablationButton = qt.QPushButton("Start Ablation") self.ablationButton.toolTip = "Ablation timer countdown" self.ablationButton.enabled = True parametersFormLayout.addRow(self.ablationButton) # connections self.ablationButton.connect('clicked(bool)', self.onStartAblation) self.qLabel = qt.QLabel('') self.layout.addWidget(self.qLabel) # Add vertical spacer self.layout.addStretch(1)
def setup(self): # Instantiate and connect widgets ... ScriptedLoadableModuleWidget.setup(self) #self.logic = CIP_CalciumScoringLogic() # # Parameters Area # parametersCollapsibleButton = ctk.ctkCollapsibleButton() parametersCollapsibleButton.text = "Parameters" self.layout.addWidget(parametersCollapsibleButton) # Layout within the dummy collapsible button parametersFormLayout = qt.QFormLayout(parametersCollapsibleButton) # # target volume selector # self.inputSelector = slicer.qMRMLNodeComboBox() self.inputSelector.nodeTypes = ( ("vtkMRMLScalarVolumeNode"), "" ) self.inputSelector.addEnabled = False self.inputSelector.removeEnabled = False self.inputSelector.noneEnabled = False self.inputSelector.showHidden = False self.inputSelector.showChildNodeTypes = False self.inputSelector.setMRMLScene( slicer.mrmlScene ) self.inputSelector.setToolTip( "Pick the input to the algorithm." ) parametersFormLayout.addRow("Target Volume: ", self.inputSelector) self.inputSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onVolumeChanged) self.volumeNode = self.inputSelector.currentNode() # # Calcination type # self.calcinationTypeBox = qt.QComboBox() self.calcinationTypeBox.addItem("Heart") self.calcinationTypeBox.addItem("Aorta") parametersFormLayout.addRow("Calcination Region", self.calcinationTypeBox) self.calcinationTypeBox.connect("currentIndexChanged(int)", self.onTypeChanged) self.ThresholdRange = ctk.ctkRangeWidget() self.ThresholdRange.minimum = 0 self.ThresholdRange.maximum = 3000 self.ThresholdRange.setMinimumValue(self.ThresholdMin) self.ThresholdRange.setMaximumValue(self.ThresholdMax) self.ThresholdRange.connect("minimumValueChanged(double)", self.onThresholdMinChanged) self.ThresholdRange.connect("maximumValueChanged(double)", self.onThresholdMaxChanged) parametersFormLayout.addRow("Threshold Value", self.ThresholdRange) self.ThresholdRange.setMinimumValue(self.ThresholdMin) self.ThresholdRange.setMaximumValue(self.ThresholdMax) self.LesionSizeRange= ctk.ctkRangeWidget() self.LesionSizeRange.minimum = 1 self.LesionSizeRange.maximum = 1000 self.LesionSizeRange.setMinimumValue(self.MinimumLesionSize) self.LesionSizeRange.setMaximumValue(self.MaximumLesionSize) self.LesionSizeRange.connect("minimumValueChanged(double)", self.onMinSizeChanged) self.LesionSizeRange.connect("maximumValueChanged(double)", self.onMaxSizeChanged) parametersFormLayout.addRow("Lesion Size (mm^3)", self.LesionSizeRange) self.LesionSizeRange.setMinimumValue(self.MinimumLesionSize) self.LesionSizeRange.setMaximumValue(self.MaximumLesionSize) self.scoreField = qt.QLineEdit() self.scoreField.setText(self.totalScore) parametersFormLayout.addRow("Total Score", self.scoreField) # # Select table # self.selectLabels = qt.QTableWidget() self.selectLabels.horizontalHeader().hide() self.selectLabels.verticalHeader().hide() self.selectLabels.setColumnCount(2) self.selectLabels.itemClicked.connect(self.handleItemClicked) parametersFormLayout.addRow("", self.selectLabels) # # ROI Area # self.roiCollapsibleButton = ctk.ctkCollapsibleButton() self.roiCollapsibleButton.text = "Heart ROI" self.roiCollapsibleButton.setChecked(False) self.layout.addWidget(self.roiCollapsibleButton) # Layout within the dummy collapsible button roiFormLayout = qt.QFormLayout(self.roiCollapsibleButton) # # ROI # self.ROIWidget = slicer.qMRMLAnnotationROIWidget() self.roiNode = slicer.vtkMRMLAnnotationROINode() slicer.mrmlScene.AddNode(self.roiNode) self.ROIWidget.setMRMLAnnotationROINode(self.roiNode) roiFormLayout.addRow("", self.ROIWidget) self.roiNode.AddObserver("ModifiedEvent", self.onROIChangedEvent, 1) # Add vertical spacer self.layout.addStretch(1) # Add temp nodes self.croppedNode=slicer.vtkMRMLScalarVolumeNode() self.croppedNode.SetHideFromEditors(1) slicer.mrmlScene.AddNode(self.croppedNode) self.labelsNode=slicer.vtkMRMLLabelMapVolumeNode() slicer.mrmlScene.AddNode(self.labelsNode) if self.inputSelector.currentNode(): self.onVolumeChanged(self.inputSelector.currentNode()) self.createModels()
def __init__(self, logic, applyButton, buttonsList): super(ILSVisualizationWidget, self).__init__() self.logic = logic self.applyButton = applyButton self.fiducialButtonsList = buttonsList self.widget = qt.QWidget() self.layout = qt.QFormLayout(self.widget) self.boxHolder = qt.QWidget() self.boxHolder.setLayout(qt.QVBoxLayout()) self.layout.addRow(self.boxHolder) self.groupBox = qt.QFrame() self.groupBox.setLayout(qt.QHBoxLayout()) self.fiducialsCollapsibleButton = ctk.ctkCollapsibleButton() self.fiducialsCollapsibleButton.text = "Show Fiducials" self.fiducialsCollapsibleButton.hide() self.fiducialsFormLayout = qt.QFormLayout( self.fiducialsCollapsibleButton) # Table Widget Definition self.tableWidget = qt.QTableWidget() self.tableWidget.sortingEnabled = False self.tableWidget.hide() self.tableWidget.setColumnCount(3) self.tableWidget.setColumnWidth(0, 190) self.tableWidget.setColumnWidth(1, 190) self.tableWidget.setColumnWidth(2, 190) self.tableWidget.setMaximumWidth(590) horizontalBar = self.tableWidget.horizontalScrollBar() horizontalBar.setDisabled(True) horizontalBar.hide() self.tableWidget.setHorizontalHeaderLabels([ "Left Oblique Fiducials", "Right Oblique Fiducials", "Right Horizontal Fiducials" ]) behavior = qt.QAbstractItemView() self.tableWidget.setSelectionBehavior(behavior.SelectItems) self.tableWidget.setSelectionMode(behavior.SingleSelection) self.tableWidget.setContextMenuPolicy(3) self.tableWidget.customContextMenuRequested.connect(self.onRightClick) self.groupBox.layout().addWidget(self.tableWidget) self.fiducialsFormLayout.addWidget(self.groupBox) self.boxHolder.layout().addWidget(self.fiducialsCollapsibleButton) self.pendingUpdate = False self.updatingFiducials = False self.observerTags = [] self.leftRow = 0 self.rightObliqueRow = 0 self.rightHorizontalRow = 0 self.tableItems = [] self.deletionGroupBox = qt.QFrame() self.deletionGroupBox.setLayout(qt.QHBoxLayout()) self.fiducialsFormLayout.addWidget(self.deletionGroupBox) # # Delete Selected Fiducials Button # self.deleteButton = qt.QPushButton("Delete Selected Fiducial") self.deleteButton.toolTip = "Select a fiducial from the table and push this button to delete the selected fiducial from the scene." self.deleteButton.enabled = True selectedIcon = qt.QIcon(":/Icons/MarkupsDelete.png") self.deleteButton.setIcon(selectedIcon) self.deleteButton.setFixedSize(220, 30) self.deletionGroupBox.layout().addWidget(self.deleteButton) self.deleteButton.connect('clicked(bool)', self.onDeleteOneFiducialButton) # # Delete All Fiducials Button # self.deleteAllButton = qt.QPushButton("Delete All Fiducials") self.deleteAllButton.toolTip = "Delete all fiducials in the scene." self.deleteAllButton.enabled = True allIcon = qt.QIcon(":/Icons/MarkupsDeleteAllRows.png") self.deleteAllButton.setIcon(allIcon) self.deleteAllButton.setFixedSize(220, 30) self.deletionGroupBox.layout().addWidget(self.deleteAllButton) # self.fiducialsFormLayout.addRow(self.deleteAllButton) self.deleteAllButton.connect('clicked(bool)', self.dialogBoxFunction)
def setup(self): ScriptedLoadableModuleWidget.setup(self) # layoutLogic = slicer.app.layoutManager.layoutLogic() slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutSideBySideView) l = slicer.modules.createmodels.logic() self.needleModel = l.CreateNeedle(150, 0.4, 0, False) self.redWidget = slicer.app.layoutManager().sliceWidget('Red') self.yellowWidget = slicer.app.layoutManager().sliceWidget('Yellow') self.usContainer = ctk.ctkCollapsibleButton() #This is what the button will say self.usContainer.text = "Connection Information" #Thiss actually creates that button #This creates a variable that describes layout within this collapsible button self.usLayout = qt.QFormLayout(self.usContainer) if slicer.mrmlScene.GetNodesByClass("vtkMRMLSequenceNode").GetNumberOfItems() == 0: #This is a push button self.connectButton = qt.QPushButton() self.connectButton.setDefault(False) #This button says connect self.connectButton.text = "Connect" #help tooltip that explains the funciton self.connectButton.toolTip = "Connects to ultrasound" #adds the widget to the layout self.usLayout.addWidget(self.connectButton) # self.normalImageButton = qt.QCheckBox() # self.normalImageButton.text = "Select if performing a 2D Calibration" # self.usLayout.addRow(self.normalImageButton) self.imageSelector = slicer.qMRMLNodeComboBox() self.imageSelector.nodeTypes = ["vtkMRMLScalarVolumeNode"] self.imageSelector.selectNodeUponCreation = True self.imageSelector.addEnabled = False self.imageSelector.removeEnabled = False self.imageSelector.noneEnabled = True self.imageSelector.showHidden = False self.imageSelector.showChildNodeTypes = False self.imageSelector.setMRMLScene( slicer.mrmlScene ) self.imageSelector.setToolTip( "Pick the image to be used." ) self.usLayout.addRow("Left view volume: ", self.imageSelector) self.imageSelector2 = slicer.qMRMLNodeComboBox() self.imageSelector2.nodeTypes = ["vtkMRMLScalarVolumeNode"] self.imageSelector2.selectNodeUponCreation = True self.imageSelector2.addEnabled = False self.imageSelector2.removeEnabled = False self.imageSelector2.noneEnabled = True self.imageSelector2.showHidden = False self.imageSelector2.showChildNodeTypes = False self.imageSelector2.setMRMLScene( slicer.mrmlScene ) self.imageSelector2.setToolTip( "Pick the image to be used." ) self.usLayout.addRow("Right view volume: ", self.imageSelector2) #add combo box for linear transform node self.TransformSelector = slicer.qMRMLNodeComboBox() self.TransformSelector.nodeTypes = ["vtkMRMLLinearTransformNode"] self.TransformSelector.selectNodeUponCreation = True self.TransformSelector.addEnabled = False self.TransformSelector.removeEnabled = False self.TransformSelector.noneEnabled = True self.TransformSelector.showHidden = False self.TransformSelector.showChildNodeTypes = False self.TransformSelector.setMRMLScene( slicer.mrmlScene ) self.TransformSelector.setToolTip( "Pick the transform representing the straw line." ) self.usLayout.addRow("Tip to Probe: ", self.TransformSelector) self.recordContainer = ctk.ctkCollapsibleButton() #This is what the button will say self.recordContainer.text = "Recording Options" #Thiss actually creates that button #This creates a variable that describes layout within this collapsible button self.recordLayout = qt.QFormLayout(self.recordContainer) self.RecordButton = qt.QPushButton() self.RecordButton.text = "Start Recording" self.recordLayout.addWidget(self.RecordButton) self.StopRecordButton = qt.QPushButton() self.StopRecordButton.text = "Stop Recording" self.recordLayout.addWidget(self.StopRecordButton) self.pathInput = qt.QLineEdit() self.pathInput.setPlaceholderText("Enter the path to save files to") self.pathText = qt.QLabel("File Path:") self.recordLayout.addRow(self.pathText, self.pathInput) self.SaveRecordButton = qt.QPushButton() self.SaveRecordButton.text = "Save Recording" self.recordLayout.addWidget(self.SaveRecordButton) # This creates another collapsible button self.fiducialContainer = ctk.ctkCollapsibleButton() self.fiducialContainer.text = "Registration" self.fiducialLayout = qt.QFormLayout(self.fiducialContainer) self.freezeButton = qt.QPushButton() if slicer.mrmlScene.GetNodesByClass("vtkMRMLSequenceNode").GetNumberOfItems() == 0: self.freezeButton.text = "Freeze" else: self.freezeButton.text = "Place Fiducial" self.freezeButton.toolTip = "Freeze the ultrasound image for fiducial placement" self.fiducialLayout.addRow(self.freezeButton) self.shortcut = qt.QShortcut(qt.QKeySequence('f'), slicer.util.mainWindow()) self.numFidLabel = qt.QLabel() self.fiducialLayout.addRow(qt.QLabel("Fiducials collected:"), self.numFidLabel) self.transformTable = qt.QTableWidget() self.transTableItem = qt.QTableWidgetItem() self.fidError = qt.QLabel() self.transformTable.setRowCount(4) self.transformTable.setColumnCount(4) self.transformTable.horizontalHeader().hide() self.transformTable.verticalHeader().hide() self.transformTable.setItem(0,0, qt.QTableWidgetItem("1")) self.transformTable.setItem(0,1, qt.QTableWidgetItem("0")) self.transformTable.setItem(0,2, qt.QTableWidgetItem("0")) self.transformTable.setItem(0,3, qt.QTableWidgetItem("0")) self.transformTable.setItem(1,0, qt.QTableWidgetItem("0")) self.transformTable.setItem(1,1, qt.QTableWidgetItem("1")) self.transformTable.setItem(1,2, qt.QTableWidgetItem("0")) self.transformTable.setItem(1,3, qt.QTableWidgetItem("0")) self.transformTable.setItem(2,0, qt.QTableWidgetItem("0")) self.transformTable.setItem(2,1, qt.QTableWidgetItem("0")) self.transformTable.setItem(2,2, qt.QTableWidgetItem("1")) self.transformTable.setItem(2,3, qt.QTableWidgetItem("0")) self.transformTable.setItem(3,0, qt.QTableWidgetItem("0")) self.transformTable.setItem(3,1, qt.QTableWidgetItem("0")) self.transformTable.setItem(3,2, qt.QTableWidgetItem("0")) self.transformTable.setItem(3,3, qt.QTableWidgetItem("1")) self.transformTable.setSizePolicy(qt.QSizePolicy.Minimum, qt.QSizePolicy.MinimumExpanding) self.copyIcon =qt.QIcon(":Icons/Medium/SlicerEditCopy.png") self.copyButton = qt.QPushButton() self.copyButton.setIcon(self.copyIcon) self.copyButton.setMaximumWidth(64) self.copyButton.enabled = False if self.numFidLabel >= 2: self.copyButton.enabled = True self.fiducialLayout.addRow(qt.QLabel("Image to probe transform:")) self.fiducialLayout.addRow(self.transformTable) self.fiducialLayout.addRow("Copy:", self.copyButton) self.validationContainer = ctk.ctkCollapsibleButton() self.validationContainer.text = "Validation" self.validationLayout = qt.QFormLayout(self.validationContainer) self.visualizeButton = qt.QPushButton('Show 3D Scene') self.visualizeButton.toolTip = "This button enables the 3D view for visual validation" self.validationLayout.addRow(self.visualizeButton) self.visualizeButton.connect('clicked(bool)', self.onVisualizeButtonClicked) self.layout.addWidget(self.usContainer) if slicer.mrmlScene.GetNodesByClass("vtkMRMLSequenceNode").GetNumberOfItems() == 0: self.layout.addWidget(self.recordContainer) self.layout.addWidget(self.fiducialContainer) self.layout.addWidget(self.validationContainer) if slicer.mrmlScene.GetNodesByClass("vtkMRMLSequenceNode").GetNumberOfItems() == 0: self.connectButton.connect('clicked(bool)', self.onConnectButtonClicked) self.freezeButton.connect('clicked(bool)', self.onConnectButtonClicked) self.shortcut.connect('activated()', self.onConnectButtonClicked) self.RecordButton.connect('clicked(bool)', self.onRecordButtonClicked) self.StopRecordButton.connect('clicked(bool)', self.onStopButtonClicked) self.SaveRecordButton.connect('clicked(bool)', self.onSaveButtonClicked) else: self.shortcut.connect('activated()', self.onFiducialClicked) self.freezeButton.connect('clicked(bool)', self.onFiducialClicked) self.imageSelector.connect('currentNodeChanged(vtkMRMLNode*)', self.onImageChanged) self.imageSelector2.connect('currentNodeChanged(vtkMRMLNode*)', self.onImageChanged2) self.TransformSelector.connect('currentNodeChanged(vtkMRMLNode*)',self.onTransformChanged) self.copyButton.connect('clicked(bool)', self.onCopyButtonClicked) self.layout.addStretch(1) self.sceneObserverTag = slicer.mrmlScene.AddObserver(slicer.mrmlScene.NodeAddedEvent, self.onNodeAdded)
def setup(self): ScriptedLoadableModuleWidget.setup(self) # Instantiate and connect widgets ... # # Ultrasonic motors Area # ultrasonicMotorsCollapsibleButton = ctk.ctkCollapsibleButton() ultrasonicMotorsCollapsibleButton.text = "Shinsei motors" self.layout.addWidget(ultrasonicMotorsCollapsibleButton) ultrasonicFormLayout = qt.QFormLayout( ultrasonicMotorsCollapsibleButton) # Apply Button self.applyButton = qt.QPushButton("Homing Shinsei") self.applyButton.toolTip = "Run the algorithm." self.applyButton.enabled = True ultrasonicFormLayout.addRow(self.applyButton) # connections self.applyButton.connect('clicked(bool)', self.onApplyButton) # Add vertical spacer self.layout.addStretch(1) # # Piezo motors Area # piezoMotorsCollapsibleButton = ctk.ctkCollapsibleButton() piezoMotorsCollapsibleButton.text = "Piezo motors" self.layout.addWidget(piezoMotorsCollapsibleButton) piezoFormLayout = qt.QFormLayout(piezoMotorsCollapsibleButton) # # Add target table # self.positionTable = qt.QTableWidget() self.positionTable.setRowCount(3) self.positionTable.setColumnCount(3) self.positionTable.setHorizontalHeaderLabels(['1', '2', '3']) self.cbh = qt.QComboBox() self.cbh.addItem("Left") self.cbh.addItem("Center") self.cbh.addItem("Right") self.cbh.currentIndexChanged.connect(self.onSelectionChange) piezoFormLayout.addRow("Horizontal:", self.cbh) self.cbv = qt.QComboBox() self.cbv.addItems([str('Top'), str('Center'), str('Bottom')]) self.cbv.currentIndexChanged.connect(self.onSelectionChange) piezoFormLayout.addRow("Vertical:", self.cbv) self.label = qt.QLabel() pixmap = qt.QPixmap('/Resources/CB.png') self.label.setPixmap(pixmap) piezoFormLayout.addRow(self.label) # Apply Button self.piezoHomingButton = qt.QPushButton("Homing Piezo") self.piezoHomingButton.toolTip = "Run the algorithm." self.piezoHomingButton.enabled = True piezoFormLayout.addRow(self.piezoHomingButton) # connections self.piezoHomingButton.connect('clicked(bool)', self.onPiezoHomingButton) # Add vertical spacer # Apply Button self.doneHomingButton = qt.QPushButton("Done Homing") self.doneHomingButton.toolTip = "Run the algorithm." self.doneHomingButton.enabled = True piezoFormLayout.addRow(self.doneHomingButton) # connections self.doneHomingButton.connect('clicked(bool)', self.onDoneHoming)
def setupWindow(self): self.setWindowTitle("lapdMouse Data Archive Browser") self.resize(1000, 600) if 'lapdMouseDBBrowser' in slicer.util.moduleNames(): self.modulePath = slicer.modules.lapdmousedbbrowser.path.replace( "lapdMouseDBBrowser.py", "") else: self.modulePath = '.' self.downloadIcon = qt.QIcon( os.path.join(self.modulePath, 'Resources', 'Icons', 'download.png')) self.storedIcon = qt.QIcon( os.path.join(self.modulePath, 'Resources', 'Icons', 'stored.png')) self.logo = qt.QPixmap( os.path.join(self.modulePath, 'Resources', 'Icons', 'lapdMouseDBBrowser.png')) self.banner = qt.QFrame() self.banner.setLayout(qt.QGridLayout()) logo = qt.QLabel() logo.setPixmap(self.logo) self.banner.layout().addWidget(logo, 0, 0) self.bannerTextBrowser = qt.QTextBrowser() self.bannerTextBrowser.setOpenExternalLinks(True) self.bannerTextBrowser.setMaximumHeight(120) text = "<h1>lapdMouse Data Archive Browser</h1>" text += "The lapdMouse data archive contains anatomically derived lung models and aerosol deposition measurements of mice for modeling and computational toxicology in mice." text += " For more details about available datasets, data representation, other software, and support, please visit the <a href=\"https://doi.org/10.25820/9arg-9w56\">lapdMouse archive</a>" text += "<br />This work was supported in part by NIH project R01ES023863." self.bannerTextBrowser.html = text self.banner.layout().addWidget(self.bannerTextBrowser, 0, 1) self.table = qt.QTableWidget(self) self.table.setRowCount(0) self.table.setColumnCount(1) self.table.setSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Expanding) self.table.setHorizontalHeaderLabels(["Dataset name" ]) #,"Status","Comment"]) self.table.setSelectionBehavior(qt.QAbstractItemView.SelectRows) self.table.setSelectionMode(qt.QAbstractItemView.SingleSelection) self.table.horizontalHeader().setStretchLastSection(True) self.table.connect("itemSelectionChanged()", self.onDatasetChanged) self.customForm = qt.QFrame() self.customForm.setLayout(qt.QFormLayout()) self.customFormName = qt.QLineEdit("", self.customForm) self.customFormName.readOnly = True self.customForm.layout().addRow("Name", self.customFormName) self.customFormDatasetInfo = qt.QLabel('<a href=\"' + self.projectURL + '\">info</a>') self.customFormDatasetInfo.setTextFormat(1) self.customFormDatasetInfo.setOpenExternalLinks(True) self.customForm.layout().addRow("Info", self.customFormDatasetInfo) self.customFormAction = qt.QFrame(self.customForm) self.customFormAction.setLayout(qt.QHBoxLayout()) self.customFormAction.layout().setSpacing(0) self.customFormAction.layout().setMargin(0) self.customFormDownloadButton = qt.QPushButton( "download standard file selection", self.customFormAction) self.customFormAction.layout().addWidget(self.customFormDownloadButton) self.customFormDownloadButton.connect("clicked()", self.onDownloadDataset) self.customFormLoadButton = qt.QPushButton( "load standard file selection in Slicer", self.customFormAction) self.customFormAction.layout().addWidget(self.customFormLoadButton) self.customFormLoadButton.connect("clicked()", self.onLoadDataset) self.customForm.layout().addRow("Quick actions", self.customFormAction) self.customFormFiles = qt.QTableWidget(self.customForm) self.customFormFiles.setRowCount(0) self.customFormFiles.setColumnCount(3) self.customFormFiles.setHorizontalHeaderLabels( ["Status", "Filename", "Size"]) self.customFormFiles.horizontalHeader().setSectionResizeMode( 1, qt.QHeaderView.Stretch) self.customFormFiles.setSelectionBehavior( qt.QAbstractItemView.SelectRows) self.customFormFiles.setMinimumHeight(400) self.customForm.layout().addRow("Files", self.customFormFiles) self.customFormAction2 = qt.QFrame(self.customForm) self.customFormAction2.setLayout(qt.QHBoxLayout()) self.customFormAction2.layout().setSpacing(0) self.customFormAction2.layout().setMargin(0) self.customFormDownloadButton2 = qt.QPushButton( "download selected files", self.customFormAction2) self.customFormAction2.layout().addWidget( self.customFormDownloadButton2) self.customFormDownloadButton2.connect("clicked()", self.onDownloadSelectedDataset) self.customFormDeleteButton2 = qt.QPushButton("delete selected files", self.customFormAction2) self.customFormAction2.layout().addWidget(self.customFormDeleteButton2) self.customFormDeleteButton2.connect("clicked()", self.onDeleteSelectedDataset) self.customFormLoadButton2 = qt.QPushButton( "load selected files in Slicer", self.customFormAction2) self.customFormAction2.layout().addWidget(self.customFormLoadButton2) self.customFormLoadButton2.connect("clicked()", self.onLoadSelectedDataset) self.customForm.layout().addRow("", self.customFormAction2) splitView = qt.QSplitter(self) splitView.addWidget(self.table) splitView.addWidget(self.customForm) splitView.setSizes([200, 800]) self.updateTable() self.onDatasetChanged() self.setMenuWidget(self.banner) self.setCentralWidget(splitView)
def setup(self): ScriptedLoadableModuleWidget.setup(self) slicer.app.layoutManager().setLayout( slicer.vtkMRMLLayoutNode.SlicerLayoutOneUp3DView) l = slicer.modules.createmodels.logic() self.needleModel = l.CreateNeedle(150, 1, 2.5, False) # self.array1 = np.array([29, 24.37, 160.992]) # self.array2 = np.array([28, 1.630, 69.785]) # self.array3 = np.array([29,-7.321, 33.884]) # self.array4 = np.array([-26, 24.129, 160.022]) # self.array5 = np.array([-28, 11.065, 107.626]) # self.array6 = np.array([-30.387, -7.394, 33.589]) self.jigArray = np.array([[29, 24.37, 160.992], [28, 1.630, 69.785], [29, -7.321, 33.884], [-26, 24.129, 160.022], [-28, 11.065, 107.626], [-30.387, -7.394, 33.589]]) self.collectedArray = np.array([[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]) self.points = vtk.vtkPoints() self.points.SetNumberOfPoints(6) self.points.SetPoint(0, self.jigArray[0]) self.points.SetPoint(1, self.jigArray[1]) self.points.SetPoint(2, self.jigArray[2]) self.points.SetPoint(3, self.jigArray[3]) self.points.SetPoint(4, self.jigArray[4]) self.points.SetPoint(5, self.jigArray[5]) self.collectedPoints = vtk.vtkPoints() self.collectedPoints.SetNumberOfPoints(6) self.DN = self.markupsNode.GetDisplayNode() self.DN.SetSelectedColor(0, 0, 1) self.DN.SetTextScale(0) self.markupsNode.AddFiducialFromArray(self.jigArray[0]) self.markupsNode.AddFiducialFromArray(self.jigArray[1]) self.markupsNode.AddFiducialFromArray(self.jigArray[2]) self.markupsNode.AddFiducialFromArray(self.jigArray[3]) self.markupsNode.AddFiducialFromArray(self.jigArray[4]) self.markupsNode.AddFiducialFromArray(self.jigArray[5]) slicer.app.layoutManager().setLayout( slicer.vtkMRMLLayoutNode.SlicerLayoutOneUpRedSliceView) self.parametersCollapsibleButton = ctk.ctkCollapsibleButton() self.parametersCollapsibleButton.text = "Parameters" self.layout.addWidget(self.parametersCollapsibleButton) self.parametersFormLayout = qt.QFormLayout( self.parametersCollapsibleButton) self.connectButton = qt.QPushButton() self.connectButton.setDefault(False) self.connectButton.text = "Connect" self.parametersFormLayout.addWidget(self.connectButton) self.TransformSelector = slicer.qMRMLNodeComboBox() self.TransformSelector.nodeTypes = ["vtkMRMLLinearTransformNode"] self.TransformSelector.selectNodeUponCreation = True self.TransformSelector.addEnabled = False self.TransformSelector.removeEnabled = False self.TransformSelector.noneEnabled = True self.TransformSelector.showHidden = False self.TransformSelector.showChildNodeTypes = False self.TransformSelector.setMRMLScene(slicer.mrmlScene) self.TransformSelector.setToolTip( "Pick the transform representing the straw line.") self.parametersFormLayout.addRow("Tip to Probe: ", self.TransformSelector) self.collectButton = qt.QPushButton() self.collectButton.setDefault(False) self.collectButton.text = "Collect Fiducial" self.parametersFormLayout.addWidget(self.collectButton) self.shortcut = qt.QShortcut(qt.QKeySequence('c'), slicer.util.mainWindow()) self.deleteButton = qt.QPushButton() self.deleteButton.setDefault(False) self.deleteButton.text = "Delete Last Fiducial" self.parametersFormLayout.addWidget(self.deleteButton) self.calculateButton = qt.QPushButton() self.calculateButton.setDefault(False) self.calculateButton.text = "Calculate Transformation Matrix" self.parametersFormLayout.addWidget(self.calculateButton) self.transformTable = qt.QTableWidget() self.transTableItem = qt.QTableWidgetItem() self.fidError = qt.QLabel() self.transformTable.setRowCount(4) self.transformTable.setColumnCount(4) self.transformTable.horizontalHeader().hide() self.transformTable.verticalHeader().hide() self.transformTable.setItem(0, 0, qt.QTableWidgetItem("1")) self.transformTable.setItem(0, 1, qt.QTableWidgetItem("0")) self.transformTable.setItem(0, 2, qt.QTableWidgetItem("0")) self.transformTable.setItem(0, 3, qt.QTableWidgetItem("0")) self.transformTable.setItem(1, 0, qt.QTableWidgetItem("0")) self.transformTable.setItem(1, 1, qt.QTableWidgetItem("1")) self.transformTable.setItem(1, 2, qt.QTableWidgetItem("0")) self.transformTable.setItem(1, 3, qt.QTableWidgetItem("0")) self.transformTable.setItem(2, 0, qt.QTableWidgetItem("0")) self.transformTable.setItem(2, 1, qt.QTableWidgetItem("0")) self.transformTable.setItem(2, 2, qt.QTableWidgetItem("1")) self.transformTable.setItem(2, 3, qt.QTableWidgetItem("0")) self.transformTable.setItem(3, 0, qt.QTableWidgetItem("0")) self.transformTable.setItem(3, 1, qt.QTableWidgetItem("0")) self.transformTable.setItem(3, 2, qt.QTableWidgetItem("0")) self.transformTable.setItem(3, 3, qt.QTableWidgetItem("1")) self.transformTable.resizeColumnToContents(0) self.transformTable.resizeColumnToContents(1) self.transformTable.resizeColumnToContents(2) self.transformTable.resizeColumnToContents(3) self.transformTable.setSizePolicy(qt.QSizePolicy.Minimum, qt.QSizePolicy.MinimumExpanding) # self.copyIcon =qt.QIcon(":Icons/Medium/SlicerEditCopy.png") # self.copyButton = qt.QPushButton() # self.copyButton.setIcon(self.copyIcon) # self.copyButton.toolTip = "Copy" # self.copyButton.setMaximumWidth(64) # self.copyHbox = qt.QHBoxLayout() # self.copyHbox.addWidget(self.copyButton) self.parametersFormLayout.addRow(qt.QLabel("Transformation Matrix:")) self.parametersFormLayout.addRow(self.transformTable) self.copyButton = qt.QPushButton() self.copyButton.setDefault(False) self.copyButton.text = "Copy Transform" self.parametersFormLayout.addWidget(self.copyButton) self.errorString = qt.QLabel() self.errorString.text = "RMSE: " + str(self.error) self.parametersFormLayout.addRow(self.errorString) self.connectButton.connect('clicked(bool)', self.onConnectButtonClicked) self.TransformSelector.connect('currentNodeChanged(vtkMRMLNode*)', self.onTransformChanged) self.collectButton.connect('clicked(bool)', self.onCollectButtonClicked) self.shortcut.connect('activated()', self.onCollectButtonClicked) self.deleteButton.connect('clicked(bool)', self.onDeleteButtonClicked) self.calculateButton.connect('clicked(bool)', self.onCalculateButtonClicked) self.copyButton.connect('clicked(bool)', self.onCopyButtonClicked) self.layout.addStretch(1) slicer.app.layoutManager().setLayout( slicer.vtkMRMLLayoutNode.SlicerLayoutOneUp3DView)
def setup(self): ScriptedLoadableModuleWidget.setup(self) # Metadata Area metadataCollapsibleButton = ctk.ctkCollapsibleButton() metadataCollapsibleButton.text = "Metadata" self.layout.addWidget(metadataCollapsibleButton) # Layout within the dummy collapsible button metadataFormLayout = qt.QFormLayout(metadataCollapsibleButton) # userID input self.userIDField = qt.QLineEdit() metadataFormLayout.addRow("UserID: ", self.userIDField) # studyID input self.studyIDField = qt.QLineEdit() metadataFormLayout.addRow("StudyID: ", self.studyIDField) # trialID input self.trialIDField = qt.QLineEdit() metadataFormLayout.addRow("TrialID: ", self.trialIDField) # skill level selector self.skillOptions = ("Novice", "Trainee", "Expert") self.skillSelector = qt.QComboBox() self.skillSelector.addItems(self.skillOptions) metadataFormLayout.addRow("Select skill level: ", self.skillSelector) # session completed selector self.sessionCompletionOptions = ("Complete", "Incomplete") self.sessionCompletionSelector = qt.QComboBox() self.sessionCompletionSelector.addItems(self.sessionCompletionOptions) metadataFormLayout.addRow("Session status: ", self.sessionCompletionSelector) # Save Button self.saveButton = qt.QPushButton("Save session") self.saveButton.toolTip = "Uploading data to database." self.saveButton.enabled = True metadataFormLayout.addRow(self.saveButton) # Load Scene Area loadSceneCollapsibleButton = ctk.ctkCollapsibleButton() loadSceneCollapsibleButton.text = "Search For Session" self.layout.addWidget(loadSceneCollapsibleButton) # Layout within the dummy collapsible button loadSceneFormLayout = qt.QFormLayout(loadSceneCollapsibleButton) # search fields text self.searchText = qt.QLabel() self.searchText.text = "Search by fields:" loadSceneFormLayout.addRow(self.searchText) # Search user ID field self.searchUserID = qt.QLineEdit() loadSceneFormLayout.addRow("UserID: ", self.searchUserID) # Search study ID field self.searchStudyID = qt.QLineEdit() loadSceneFormLayout.addRow("StudyID: ", self.searchStudyID) # Search trial ID field self.searchTrialID = qt.QLineEdit() loadSceneFormLayout.addRow("TrialID: ", self.searchTrialID) # Search skill level field self.skillOptions = ("All", "Novice", "Trainee", "Expert") self.searchSkill = qt.QComboBox() self.searchSkill.addItems(self.skillOptions) loadSceneFormLayout.addRow("Select skill level: ", self.searchSkill) # Search Button self.searchButton = qt.QPushButton("Search for session") self.searchButton.enabled = True loadSceneFormLayout.addRow(self.searchButton) # Query Results Area self.queryResultsCollapsibleButton = ctk.ctkCollapsibleButton() self.queryResultsCollapsibleButton.text = "Query Results" self.queryResultsCollapsibleButton.setVisible(False) self.layout.addWidget(self.queryResultsCollapsibleButton) self.queryResultsLayout = qt.QFormLayout(self.queryResultsCollapsibleButton) self.table = qt.QTableWidget(1, 5) self.queryResultsLayout.addRow(self.table) #load session button self.loadButton = qt.QPushButton("Load Session") self.queryResultsLayout.addWidget(self.loadButton) # Connections self.saveButton.connect('clicked(bool)', self.onSaveButton) self.searchButton.connect('clicked(bool)', self.onSearchButton) self.loadButton.connect('clicked(bool)', self.onLoadButton)
def setup(self): ScriptedLoadableModuleWidget.setup(self) # Instantiate and connect widgets ... # # Data Area # dataGroupBox = ctk.ctkCollapsibleGroupBox() dataGroupBox.setTitle('Data') self.layout.addWidget(dataGroupBox) dataGridLayout = qt.QGridLayout(dataGroupBox) self.dirButton = ctk.ctkDirectoryButton() dirButtonLabel = qt.QLabel('DICOM Directory: ') dataGridLayout.addWidget(dirButtonLabel, 1, 1, 1, 1) dataGridLayout.addWidget(self.dirButton, 1, 2, 1, 3) self.dirButton.setMaximumWidth(500) orLabel = qt.QLabel(' - or - ') dataGridLayout.addWidget(orLabel, 2, 1, 1, 1) collectionsComboBoxLabel = qt.QLabel('TCIA Collection: ') dataGridLayout.addWidget(collectionsComboBoxLabel, 3, 1, 1, 1) try: m = slicer.modules.tciabrowser self.tcia = slicer.modules.tciabrowser.widgetRepresentation().self( ) self.connectTCIAButton = qt.QPushButton('Connect') self.connectTCIAButton.toolTip = "Connect to TCIA Server." dataGridLayout.addWidget(self.connectTCIAButton, 3, 2, 1, 1) self.collectionsComboBox = qt.QComboBox() dataGridLayout.addWidget(self.collectionsComboBox, 3, 3, 1, 2) # connections self.connectTCIAButton.connect('clicked(bool)', self.getTCIACollectionValues) # TODO disable scrolling event for collectionsComboBox self.collectionsComboBox.connect('currentIndexChanged(QString)', self.onTCIACollectionChanged) except AttributeError: # TODO add button to open Extensions Manager noConnectionLabel = qt.QLabel('TCIA Browser not installed.') dataGridLayout.addWidget(noConnectionLabel, 3, 2, 1, 1) # # Patient Table Area # self.patientGroupBox = ctk.ctkCollapsibleGroupBox() self.patientGroupBox.setTitle('Patient Selection') self.layout.addWidget(self.patientGroupBox) self.patientGroupBoxLayout = qt.QGridLayout(self.patientGroupBox) self.patientsTable = qt.QTableWidget() self.patientsTableHeaderLabels = [ 'ID', 'Name', 'BirthDate', 'Sex', 'Modalities' ] self.patientsTable.setColumnCount(5) self.patientsTable.sortingEnabled = True self.patientsTable.setHorizontalHeaderLabels( self.patientsTableHeaderLabels) self.patientsTableHeader = self.patientsTable.horizontalHeader() self.patientsTableHeader.setStretchLastSection(True) self.patientGroupBoxLayout.addWidget(self.patientsTable, 1, 1, 1, 5) abstractItemView = qt.QAbstractItemView() self.patientsTable.setSelectionBehavior(abstractItemView.SelectRows) self.examinePatientButton = qt.QPushButton('Examine') self.examinePatientButton.setEnabled(False) self.patientGroupBoxLayout.addWidget(self.examinePatientButton, 2, 4, 1, 2) # # Other Connections # self.dirButton.connect('directoryChanged(const QString &)', self.onDICOMDirectoryChanged)