def __init__(self, widgetClass=None): self.parent = qt.QFrame() self.parent.setLayout(qt.QVBoxLayout()) # TODO: should have way to pop up python interactor self.buttons = qt.QFrame() self.buttons.setLayout(qt.QHBoxLayout()) self.parent.layout().addWidget(self.buttons) self.addDataButton = qt.QPushButton("Add Data") self.buttons.layout().addWidget(self.addDataButton) self.addDataButton.connect("clicked()", slicer.app.ioManager().openAddDataDialog) self.loadSceneButton = qt.QPushButton("Load Scene") self.buttons.layout().addWidget(self.loadSceneButton) self.loadSceneButton.connect( "clicked()", slicer.app.ioManager().openLoadSceneDialog) if widgetClass: self.widget = widgetClass(self.parent) self.widget.setup() self.parent.show()
def __init__(self): qt.QWidget.__init__(self) self.setLayout(qt.QVBoxLayout()) self.mainWidget = qt.QWidget() self.mainWidget.objectName = "qSlicerAppMainWindow" self.mainWidget.setLayout(qt.QVBoxLayout()) self.setupLayoutWidget() self.moduleFrame = qt.QWidget() self.moduleFrameLayout = qt.QVBoxLayout() self.moduleFrame.setLayout(self.moduleFrameLayout) self.buttons = qt.QFrame() self.buttons.setLayout(qt.QHBoxLayout()) self.moduleFrameLayout.addWidget(self.buttons) self.addDataButton = qt.QPushButton("Add Data") self.buttons.layout().addWidget(self.addDataButton) self.addDataButton.connect("clicked()", slicer.app.ioManager().openAddDataDialog) self.loadSceneButton = qt.QPushButton("Load Scene") self.buttons.layout().addWidget(self.loadSceneButton) self.loadSceneButton.connect( "clicked()", slicer.app.ioManager().openLoadSceneDialog) self.zFrameRegistrationWidget = ZFrameRegistrationWithROIWidget( self.moduleFrame) self.zFrameRegistrationWidget.setup() self.zFrameRegistrationWidget.reloadCollapsibleButton.visible = False # TODO: resize self.widget.parent to minimum possible width self.scrollArea = qt.QScrollArea() self.scrollArea.setWidget(self.zFrameRegistrationWidget.parent) self.scrollArea.setWidgetResizable(True) self.scrollArea.setMinimumWidth( self.zFrameRegistrationWidget.parent.minimumSizeHint.width()) self.splitter = qt.QSplitter() self.splitter.setOrientation(qt.Qt.Horizontal) self.splitter.addWidget(self.scrollArea) self.splitter.addWidget(self.layoutWidget) self.splitter.splitterMoved.connect(self.onSplitterMoved) self.splitter.setStretchFactor(0, 0) self.splitter.setStretchFactor(1, 1) self.splitter.handle(1).installEventFilter(self) self.mainWidget.layout().addWidget(self.splitter) self.mainWidget.show()
def __init__(self, parent=None): self._window = qt.QDialog(parent) self._window.setIcon(getPixmap("smart")) self._window.setCaption(_("New Target")) self._window.setModal(True) #self._window.setMinimumSize(600, 400) vbox = qt.QVBox(self._window) vbox.setMargin(10) vbox.setSpacing(10) vbox.show() table = qt.QGrid(2, vbox) table.setSpacing(10) table.show() label = qt.QLabel(_("Target:"), table) self._target = qt.QLineEdit(table) self._target.setMaxLength(40) self._target.show() blank = qt.QWidget(table) label = qt.QLabel( _("Examples: \"pkgname\", \"pkgname = 1.0\" or " "\"pkgname <= 1.0\""), table) sep = qt.QFrame(vbox) sep.setFrameShape(qt.QFrame.HLine) sep.setFrameShadow(qt.QFrame.Sunken) sep.show() bbox = qt.QHBox(vbox) bbox.setSpacing(10) bbox.layout().addStretch(1) bbox.show() button = qt.QPushButton(bbox.tr("OK"), bbox) qt.QObject.connect(button, qt.SIGNAL("clicked()"), self._window, qt.SLOT("accept()")) button = qt.QPushButton(bbox.tr("Cancel"), bbox) qt.QObject.connect(button, qt.SIGNAL("clicked()"), self._window, qt.SLOT("reject()")) vbox.adjustSize() self._window.adjustSize()
def createDefaultOptionsWidget(self): # create list of checkboxes that allow selection of requested keys self.optionsWidget = qt.QWidget() form = qt.QFormLayout(self.optionsWidget) # checkbox to enable/disable plugin self.pluginCheckbox = qt.QCheckBox(self.name + " plugin enabled") self.pluginCheckbox.checked = True self.pluginCheckbox.connect('stateChanged(int)', self.updateParameterNodeFromGui) form.addRow(self.pluginCheckbox) # select all/none/default buttons selectAllNoneFrame = qt.QFrame(self.optionsWidget) selectAllNoneFrame.setLayout(qt.QHBoxLayout()) selectAllNoneFrame.layout().setSpacing(0) selectAllNoneFrame.layout().setMargin(0) selectAllNoneFrame.layout().addWidget(qt.QLabel("Select measurements: ", self.optionsWidget)) selectAllButton = qt.QPushButton('all', self.optionsWidget) selectAllNoneFrame.layout().addWidget(selectAllButton) selectAllButton.connect('clicked()', self.requestAll) selectNoneButton = qt.QPushButton('none', self.optionsWidget) selectAllNoneFrame.layout().addWidget(selectNoneButton) selectNoneButton.connect('clicked()', self.requestNone) selectDefaultButton = qt.QPushButton('default', self.optionsWidget) selectAllNoneFrame.layout().addWidget(selectDefaultButton) selectDefaultButton.connect('clicked()', self.requestDefault) form.addRow(selectAllNoneFrame) # checkboxes for individual keys self.requestedKeysCheckboxes = {} requestedKeys = self.getRequestedKeys() for key in self.keys: label = key tooltip = "key: " + key info = self.getMeasurementInfo(key) if info and ("name" in info or "description" in info): label = info["name"] if "name" in info else info["description"] if "name" in info: tooltip += "\nname: " + str(info["name"]) if "description" in info: tooltip += "\ndescription: " + str(info["description"]) if "units" in info: tooltip += "\nunits: " + (str(info["units"]) if info["units"] else "n/a") checkbox = qt.QCheckBox(label, self.optionsWidget) checkbox.checked = key in requestedKeys checkbox.setToolTip(tooltip) form.addRow(checkbox) self.requestedKeysCheckboxes[key] = checkbox checkbox.connect('stateChanged(int)', self.updateParameterNodeFromGui)
def addToggleApplyButtons(self): toggleApplyFrame = qt.QFrame() toggleApplyLayout = qt.QHBoxLayout(toggleApplyFrame) self.toggleButton = qt.QPushButton('Toggle volumes') self.toggleButton.clicked.connect(self.onToggleButton) self.toggleButton.setDisabled(True) toggleApplyLayout.addWidget(self.toggleButton) self.applyButton = qt.QPushButton('Apply transform') self.applyButton.clicked.connect(self.onApplyButton) self.applyButton.setDisabled(True) toggleApplyLayout.addWidget(self.applyButton) self.layout.addWidget(toggleApplyFrame)
def createButtonRow(self, effects, rowLabel=""): """ create a row of the edit box given a list of effect names (items in _effects(list) """ rowFrame = qt.QFrame(self.mainFrame) self.mainFrame.layout().addWidget(rowFrame) self.rowFrames.append(rowFrame) rowFrame.objectName = "RowFrame%s" % len(self.rowFrames) hbox = qt.QHBoxLayout() rowFrame.setLayout(hbox) if rowLabel: label = qt.QLabel(rowLabel) hbox.addWidget(label) for effect in effects: # check that the effect belongs in our list of effects before including if (effect in self.effects): i = self.icons[effect] = qt.QIcon(self.effectIconFiles[effect]) a = self.actions[effect] = qt.QAction(i, '', rowFrame) a.objectName = effect + 'Action' self.effectButtons[effect] = b = self.buttons[ effect] = qt.QToolButton() b.objectName = effect + 'ToolButton' b.setDefaultAction(a) a.setToolTip(effect) if EditBox.displayNames.has_key(effect): a.setToolTip(EditBox.displayNames[effect]) hbox.addWidget(b) if effect not in ('EraseLabel', 'PreviousCheckPoint', 'NextCheckPoint'): # Mapping between action and its associated effect, is done # in function'_onEffectActionTriggered' by retrieving the 'effectName' # property. a.checkable = True a.setProperty('effectName', effect) self.effectActionGroup.addAction(a) elif effect == 'EraseLabel': a.checkable = True a.connect('triggered(bool)', self._onEraseLabelActionTriggered) elif effect == 'PreviousCheckPoint': a.connect('triggered(bool)', self.undoRedo.undo) elif effect == 'NextCheckPoint': a.connect('triggered(bool)', self.undoRedo.redo) hbox.addStretch(1)
def __init__(self, parent=None, name="scan_plot_widget"): qt.QWidget.__init__(self, parent, name) self.xdata = [] self.ylabel = "" self.isRealTimePlot = None self.isConnected = None self.isScanning = None self.lblTitle = qt.QLabel(self) self.graphPanel = qt.QFrame(self) buttonBox = qt.QHBox(self) self.lblPosition = qt.QLabel(buttonBox) self.graph = QtBlissGraph(self.graphPanel) qt.QObject.connect( self.graph, qt.PYSIGNAL("QtBlissGraphSignal"), self.handleBlissGraphSignal ) qt.QObject.disconnect( self.graph, qt.SIGNAL("plotMousePressed(const QMouseEvent&)"), self.graph.onMousePressed, ) qt.QObject.disconnect( self.graph, qt.SIGNAL("plotMouseReleased(const QMouseEvent&)"), self.graph.onMouseReleased, ) self.graph.canvas().setMouseTracking(True) self.graph.enableLegend(False) self.graph.enableZoom(False) # self.graph.setAutoLegend(False) self.lblPosition.setAlignment(qt.Qt.AlignRight) self.lblTitle.setAlignment(qt.Qt.AlignHCenter) self.lblTitle.setSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Fixed) self.lblPosition.setSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Fixed) buttonBox.setSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Fixed) qt.QVBoxLayout(self.graphPanel) self.graphPanel.layout().addWidget(self.graph) qt.QVBoxLayout(self) self.layout().addWidget(self.lblTitle) self.layout().addWidget(buttonBox) self.layout().addWidget(self.graphPanel) self.setPaletteBackgroundColor(qt.Qt.white)
def openCreateNewImageClassWindow(self): self.createNewImageClassWidget = qt.QDialog() self.createNewImageClassWidget.setModal(True) self.createNewImageClassFrame = qt.QFrame( self.createNewImageClassWidget) self.createNewImageClassFrame.setFrameStyle(0x0006) self.createNewImageClassWidget.setWindowTitle('Create New Model') self.createNewImageClassPopupGeometry = qt.QRect() mainWindow = slicer.util.mainWindow() if mainWindow: mainWindowGeometry = mainWindow.geometry self.windowWidth = mainWindow.width * 0.35 self.windowHeight = mainWindow.height * 0.35 self.createNewImageClassPopupGeometry.setWidth(self.windowWidth) self.createNewImageClassPopupGeometry.setHeight(self.windowHeight) self.popupPositioned = False self.createNewImageClassWidget.setGeometry( self.createNewImageClassPopupGeometry) self.createNewImageClassFrame.setGeometry( self.createNewImageClassPopupGeometry) self.createNewImageClassWidget.move( mainWindow.width / 2.0 - self.windowWidth, mainWindow.height / 2 - self.windowHeight) self.createNewImageClassLayout = qt.QVBoxLayout() self.createNewImageClassLayout.setContentsMargins(12, 4, 4, 4) self.createNewImageClassLayout.setSpacing(4) self.createNewImageClassButtonLayout = qt.QFormLayout() self.createNewImageClassButtonLayout.setContentsMargins(12, 4, 4, 4) self.createNewImageClassButtonLayout.setSpacing(4) self.imageClassNameLineEdit = qt.QLineEdit("Image Class Name") self.createNewImageClassButtonLayout.addRow( self.imageClassNameLineEdit) self.createNewImageClassButton = qt.QPushButton("Add Image Class") self.createNewImageClassButtonLayout.addRow( self.createNewImageClassButton) self.imageErrorLabel = qt.QLabel("") self.createNewImageClassButtonLayout.addRow(self.imageErrorLabel) self.createNewImageClassButton.connect('clicked(bool)', self.onNewImageClassAdded) self.createNewImageClassLayout.addLayout( self.createNewImageClassButtonLayout) self.createNewImageClassFrame.setLayout(self.createNewImageClassLayout)
def __init__(self, columnNames): super().__init__() self.addButton = qt.QPushButton('+') self.addButton.clicked.connect(self.onAddButton) self.removeButton = qt.QPushButton('-') self.removeButton.clicked.connect(self.onRemoveButton) self.linkStagesPushButton = qt.QPushButton('Link Across Stages') self.linkStagesPushButton.toolTip = 'When checked, settings will be the same for all stages.' self.linkStagesPushButton.checkable = True self.buttonsFrame = qt.QFrame() self.buttonsFrame.setSizePolicy(qt.QSizePolicy.Preferred, qt.QSizePolicy.Minimum) self.buttonsFrame.setLayout(qt.QHBoxLayout()) self.buttonsFrame.layout().addWidget(self.addButton) self.buttonsFrame.layout().addWidget(self.removeButton) self.buttonsFrame.layout().addWidget(self.linkStagesPushButton) self.model = qt.QStandardItemModel(1, len(columnNames)) for i, columnName in enumerate(columnNames): self.model.setHeaderData(i, qt.Qt.Horizontal, columnName) self.view = qt.QTableView() self.view.setEditTriggers(self.view.CurrentChanged + self.view.DoubleClicked + self.view.SelectedClicked) self.view.setSelectionMode(self.view.SingleSelection) self.view.setSelectionBehavior(self.view.SelectRows) self.view.horizontalHeader().setStretchLastSection(True) self.view.setHorizontalScrollMode(self.view.ScrollPerPixel) self.view.verticalHeader().setMaximumSectionSize(self.RowHeight) self.view.verticalHeader().setMinimumSectionSize(self.RowHeight) self.view.verticalHeader().setDefaultSectionSize(self.RowHeight) self.view.setFixedHeight(65) self.view.setModel(self.model) self.view.setCurrentIndex(self.model.index(0, 0)) self.view.selectionModel().selectionChanged.connect( self.onSelectionChanged) layout = qt.QVBoxLayout(self) layout.addWidget(self.buttonsFrame) layout.addWidget(self.view) return layout
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 setup(self): ScriptedLoadableModuleWidget.setup(self) self.logic = CartoExportLogic() frame = qt.QFrame() lay = qt.QFormLayout() frame.setLayout(lay) self.layout.addWidget(frame) self.vtkModelSelector = slicer.qMRMLNodeComboBox() self.vtkModelSelector.nodeTypes = ["vtkMRMLModelNode"] self.vtkModelSelector.noneEnabled = True self.vtkModelSelector.renameEnabled = True self.vtkModelSelector.setMRMLScene(slicer.mrmlScene) self.vtkModelSelector.setToolTip( "VTK model node that needs to be converted") self.firstNameLineEdit = qt.QLineEdit(self.logic.FIRST) self.lastNameLineEdit = qt.QLineEdit(self.logic.LAST) self.mrnLineEdit = qt.QLineEdit(self.logic.ID) self.mrnLineEdit.setValidator( qt.QRegExpValidator(qt.QRegExp("[0-9]*"), self.mrnLineEdit)) self.exportButton = qt.QPushButton("Export ...") self.exportButton.enabled = False lay.addRow("VTK Model Node:", self.vtkModelSelector) lay.addRow("First name:", self.firstNameLineEdit) lay.addRow("Last name:", self.lastNameLineEdit) lay.addRow("MRN:", self.mrnLineEdit) lay.addWidget(self.exportButton) self.vtkModelSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onCurrentModelNodeChanged) self.exportButton.clicked.connect(self.onSaveClicked) self.firstNameLineEdit.editingFinished.connect( lambda: setattr(self.logic, "FIRST", self.firstNameLineEdit.text)) self.lastNameLineEdit.editingFinished.connect( lambda: setattr(self.logic, "LAST", self.lastNameLineEdit.text)) self.mrnLineEdit.editingFinished.connect( lambda: setattr(self.logic, "ID", self.mrnLineEdit.text)) self.layout.addStretch(1) self.onCurrentModelNodeChanged(self.vtkModelSelector.currentNode())
def create(self,registrationState): """Call this method from your subclass to manage dynamic layout and widget deleting - registrationState is a callable object that will give you an instance of a RegistrationState object that you can use to determine the current state of the fixed, moving, and other parameters of the parent gui. """ self.registrationState = registrationState if not self.parent: self.parent = slicer.qMRMLWidget() self.parent.setLayout(qt.QVBoxLayout()) self.parent.setMRMLScene(slicer.mrmlScene) self.parent.show() self.frame = qt.QFrame(self.parent) self.frame.objectName = 'EditOptionsFrame' self.frame.setLayout(qt.QVBoxLayout()) self.parent.layout().addWidget(self.frame) self.widgets.append(self.frame)
def buildGUI(self, parent, showCatheterSelector=True): parentLayout = qt.QVBoxLayout(parent) # Catheter selector self.catheterComboBox = QComboBoxCatheter() self.catheterComboBox.setCatheterCollection(self.catheters) self.catheterComboBox.currentIndexChanged.connect( self.onCatheterSelected) if showCatheterSelector: selectorLayout = qt.QFormLayout(parent) parentLayout.addLayout(selectorLayout) selectorLayout.addRow("Catheter: ", self.catheterComboBox) # Main panel mainPanelFrame = qt.QFrame(parent) parentLayout.addWidget(mainPanelFrame) self.buildMainPanel(mainPanelFrame)
def __init__(self, parent=None): self._fields = {} self._fieldn = 0 self._window = qt.QDialog(parent) self._window.setIcon(getPixmap("smart")) self._window.setCaption(_("Edit Channel")) self._window.setModal(True) layout = qt.QVBoxLayout(self._window) layout.setResizeMode(qt.QLayout.FreeResize) vbox = qt.QVBox(self._window) vbox.setMargin(10) vbox.setSpacing(10) vbox.show() layout.addWidget(vbox) self._vbox = vbox self._table = qt.QGrid(2, vbox) self._table.setSpacing(10) self._table.show() sep = qt.QFrame(vbox) sep.setFrameShape(qt.QFrame.HLine) sep.setFrameShadow(qt.QFrame.Sunken) sep.show() bbox = qt.QHBox(vbox) bbox.setSpacing(10) bbox.layout().addStretch(1) bbox.show() button = qt.QPushButton(_("Cancel"), bbox) qt.QObject.connect(button, qt.SIGNAL("clicked()"), self._window, qt.SLOT("reject()")) button = qt.QPushButton(_("OK"), bbox) qt.QObject.connect(button, qt.SIGNAL("clicked()"), self._window, qt.SLOT("accept()")) button.setDefault(True)
def __init__(self, parent=None, width=400, height=400, showWidget=False, scale=False): super(LayerReveal, self).__init__() self.width = width self.height = height self.showWidget = showWidget self.scale = scale self.renderer = None # utility Qt instances for use in methods self.gray = qt.QColor() self.gray.setRedF(0.5) self.gray.setGreenF(0.5) self.gray.setBlueF(0.5) # a painter to use for various jobs self.painter = qt.QPainter() # make a qwidget display if self.showWidget: self.frame = qt.QFrame(parent) mw = slicer.util.mainWindow() self.frame.setGeometry(mw.x, mw.y, self.width, self.height) self.frameLayout = qt.QVBoxLayout(self.frame) self.label = qt.QLabel() self.frameLayout.addWidget(self.label) self.frame.show() # make an image actor in the slice view self.vtkImage = vtk.vtkImageData() self.mrmlUtils = slicer.qMRMLUtils() self.imageMapper = vtk.vtkImageMapper() self.imageMapper.SetColorLevel(128) self.imageMapper.SetColorWindow(255) if vtk.VTK_MAJOR_VERSION <= 5: self.imageMapper.SetInput(self.vtkImage) else: self.imageMapper.SetInputData(self.vtkImage) self.actor2D = vtk.vtkActor2D() self.actor2D.SetMapper(self.imageMapper)
def __init__(self, parent=None): self._window = qt.QDialog(parent) self._window.setIcon(getPixmap("smart")) self._window.setCaption(_("New Channel")) self._window.setModal(True) vbox = qt.QVBox(self._window) vbox.setMargin(10) vbox.setSpacing(10) vbox.show() self._vbox = vbox table = qt.QGrid(2, vbox) table.setSpacing(10) table.show() self._table = table label = qt.QLabel(_("Type:"), table) self._typevbox = qt.QVButtonGroup(table) self._typevbox.setFrameStyle(qt.QFrame.NoFrame) self._typevbox.show() sep = qt.QFrame(vbox) sep.setFrameShape(qt.QFrame.HLine) sep.setFrameShadow(qt.QFrame.Sunken) sep.show() bbox = qt.QHBox(vbox) bbox.setSpacing(10) bbox.layout().addStretch(1) bbox.show() button = qt.QPushButton(_("Cancel"), bbox) qt.QObject.connect(button, qt.SIGNAL("clicked()"), self._window, qt.SLOT("reject()")) button = qt.QPushButton(_("OK"), bbox) qt.QObject.connect(button, qt.SIGNAL("clicked()"), self._window, qt.SLOT("accept()")) self._ok = button self._ok.setEnabled(False)
def __init__(self, parent=None, type='small'): self.type = type # keep list of pairs: [observee,tag] so they can be removed easily self.styleObserverTags = [] # keep a map of interactor styles to sliceWidgets so we can easily get sliceLogic self.sliceWidgetsPerStyle = {} self.refreshObservers() layoutManager = slicer.app.layoutManager() layoutManager.connect('layoutChanged(int)', self.refreshObservers) self.frame = qt.QFrame(parent) self.frame.setLayout(qt.QVBoxLayout()) if type == 'small': self.createSmall() #Helper class to calculate and display tensor scalars self.calculateTensorScalars = CalculateTensorScalars()
def imageCompare(self, images, text='', prefWidth=1500): """Show images in a window with a text message. """ self.imageCompare = qt.QWidget() vbox = qt.QVBoxLayout() self.imageCompare.setLayout(vbox) label = qt.QLabel(self.imageCompare) label.text = text vbox.addWidget(label) imageFrame = qt.QFrame(self.imageCompare) vbox.addWidget(imageFrame) hbox = qt.QHBoxLayout() imageFrame.setLayout(hbox) for image in images: ii = image.scaledToWidth(prefWidth / len(images)) label = qt.QLabel(imageFrame) label.pixmap = label.pixmap.fromImage(ii) hbox.addWidget(label) self.imageCompare.show()
def open(self): self.studyLabel = qt.QLabel('Send %d items to destination' % len(self.files)) self.layout().addWidget(self.studyLabel) # Send Parameters self.dicomFrame = qt.QFrame(self) self.dicomFormLayout = qt.QFormLayout() self.dicomFrame.setLayout(self.dicomFormLayout) self.settings = qt.QSettings() self.protocolSelectorCombobox = qt.QComboBox() self.protocolSelectorCombobox.addItems(["DIMSE", "DICOMweb"]) self.protocolSelectorCombobox.setCurrentText( self.settings.value('DICOM/Send/Protocol', 'DIMSE')) self.dicomFormLayout.addRow("Protocol: ", self.protocolSelectorCombobox) self.serverAddressLineEdit = qt.QLineEdit() self.serverAddressLineEdit.setToolTip( "Address includes hostname and port number in standard URL format (hostname:port)." ) self.serverAddressLineEdit.text = self.settings.value( 'DICOM/Send/URL', '') self.dicomFormLayout.addRow("Destination Address: ", self.serverAddressLineEdit) self.layout().addWidget(self.dicomFrame) # button box self.bbox = qt.QDialogButtonBox(self) self.bbox.addButton(self.bbox.Ok) self.bbox.addButton(self.bbox.Cancel) self.bbox.accepted.connect(self.onOk) self.bbox.rejected.connect(self.onCancel) self.layout().addWidget(self.bbox) self.progressBar = qt.QProgressBar(self.parent().window()) self.progressBar.hide() self.dicomFormLayout.addRow(self.progressBar) qt.QDialog.open(self)
def create(self): super(ShortCutOptions, self).create() self.helpLabel = qt.QLabel("Run the Quick TCGA Segmenter on the current label/seed image.", self.frame) self.frame.layout().addWidget(self.helpLabel) # Create a "Start Bot" button: "Start Quick TCGA Segmenter" self.botButton = qt.QPushButton(self.frame) self.frame.layout().addWidget(self.botButton) self.botButton.connect('clicked()', self.onStartBot) self.locRadFrame = qt.QFrame(self.frame) self.locRadFrame.setLayout(qt.QHBoxLayout()) self.frame.layout().addWidget(self.locRadFrame) self.widgets.append(self.locRadFrame) # Skip for now: # self.nucleus_segmentation_parameters() HelpButton(self.frame, ( "TO USE: \n Start the ShortCut segmenter and initialize the segmentation with any other editor tool like PaintEffect. Press the following keys to interact:" + "\n KEYS for Global Segmentation: " + "\n S: start Global segmentation \n E: toggle between seed image and segmentation result" + " \n R: reset seed/label image for Global Segmentation " + "\n F: toggle between selected ROI(Region of Interest) and segmentation result" + "\n Space key to go back to Slicer mode" "\n \nKEYS for ShortCut" "\n C: start ShortCut to refine the segmentation inside ROI" + "\n N: run ShortCut" + "\n R: reset ShortCut parameters" "\n Q: quit ShortCut" + "\n Mouse: LEFT for foreground, RIGHT for background")) self.frame.layout().addStretch(1) # Add vertical spacer if hasattr(slicer.modules, 'TCGAEditorBot'): slicer.util.showStatusMessage(slicer.modules.TCGAEditorBot.logic.currentMessage) self.botButton.text = "Stop Quick TCGA Segmenter" if self.locRadFrame: self.locRadFrame.hide() else: self.botButton.text = "Start Quick TCGA Segmenter" if self.locRadFrame: self.locRadFrame.show()
def __init__(self): super().__init__() effectPixmap = qt.QPixmap( os.path.join( os.path.split(WarpDrive.__file__)[0], 'Resources', 'Icons', 'Add.png')) effectIcon = qt.QIcon(effectPixmap) self.addButton = qt.QToolButton() self.addButton.setToolButtonStyle(qt.Qt.ToolButtonTextUnderIcon) self.addButton.setIcon(effectIcon) self.addButton.setIconSize(effectPixmap.rect().size()) self.addButton.setEnabled(True) self.addButton.setSizePolicy(qt.QSizePolicy.MinimumExpanding, qt.QSizePolicy.Maximum) self.addButton.clicked.connect(self.onAddButton) effectPixmap = qt.QPixmap( os.path.join( os.path.split(WarpDrive.__file__)[0], 'Resources', 'Icons', 'Delete.png')) effectIcon = qt.QIcon(effectPixmap) self.removeButton = qt.QToolButton() self.removeButton.setToolButtonStyle(qt.Qt.ToolButtonTextUnderIcon) self.removeButton.setIcon(effectIcon) self.removeButton.setText('Delete') self.removeButton.setIconSize(effectPixmap.rect().size()) self.removeButton.setEnabled(True) self.removeButton.setSizePolicy(qt.QSizePolicy.MinimumExpanding, qt.QSizePolicy.Maximum) self.removeButton.clicked.connect(self.onRemoveButton) self.buttonsFrame = qt.QFrame() self.buttonsFrame.setSizePolicy(qt.QSizePolicy.Preferred, qt.QSizePolicy.Minimum) self.buttonsFrame.setLayout(qt.QHBoxLayout()) self.buttonsFrame.layout().addWidget(self.addButton, 1) self.buttonsFrame.layout().addWidget(self.removeButton, 1) layout = qt.QVBoxLayout(self) layout.addWidget(self.buttonsFrame) layout.addWidget(self.view)
def __init__(self, parent): qt.QDialog.__init__(self, parent, "MultposConfigurator", False) """ variables """ self.motorIndexList = {} self.motorBrickList = {} self.motorConnList = [] self.motorList = [] self.hwro = None self.selPos = None """ interface """ hlayout = qt.QHBoxLayout(self) hlayout.setMargin(5) hlayout.setSpacing(5) """ value change window """ self.frame = qt.QFrame(self) self.frame.setFrameShape(qt.QFrame.NoFrame) self.frame.setFrameShadow(qt.QFrame.Plain) hlayout.addWidget(self.frame) vlayout3 = qt.QVBoxLayout(self.frame) vlayout3.setMargin(5) """ general set button """ self.geneSetButton = qt.QPushButton("Store Current Motors Positions", self.frame) self.connect(self.geneSetButton, qt.SIGNAL("clicked()"), self.__geneSet) vlayout3.addWidget(self.geneSetButton) """ MotorSpinBoxBricks for all motors """ vlayout3.addSpacing(20) vlayout3.setSpacing(5) self.motorLayout = qt.QVBoxLayout(vlayout3)
def create(self): # add a search box self.searchFrame = qt.QFrame(self.parent) self.searchFrame.setLayout(qt.QHBoxLayout()) self.parent.layout().addWidget(self.searchFrame) self.searchLabel = qt.QLabel(self.searchFrame) self.searchLabel.setText("Search: ") self.searchFrame.layout().addWidget(self.searchLabel) self.search = qt.QLineEdit(self.searchFrame) self.searchFrame.layout().addWidget(self.search) # model and view for color table self.view = qt.QTreeView() self.view.setObjectName('EditColorTreeView') self.view.setEditTriggers(qt.QAbstractItemView().NoEditTriggers) self.parent.layout().addWidget(self.view) self.populateColors() self.search.connect('textChanged(QString)', self.populateColors) self.view.connect('activated(QModelIndex)', self.selected) self.view.setProperty('SH_ItemView_ActivateItemOnSingleClick', 1)
def __init__(self, parent=None): self.labelMapNode = None self.goalSegmentation = None self.inputNode1 = None self.inputNode2 = None self.inputNode3 = None self.outputNode = None self.goalButtonTexts = ["Jagged", "Intermediate", "Smooth", "Custom"] self.goalButtonDefault = 2 self.goalButtonUserDefined = 3 self.precomputedErosionRadii = [1, 3, 5] #->> TODO do actual computation self.precomputedHoleFillIterations = [ 2, 4, 6 ] #->> TODO do actual computation self.erosionRadius = 0 self.holeFillIterations = 0 self.CLINode = None self.editorEffects = [ "DefaultTool", "EraseLabel", "Paint", "Threshold" ] self.editorWidget = None self.labelMapNodeSelector = None self.voidLabelSpinBox = None ## self.labelsColorNode = None if not parent: self.parent = qt.QFrame() self.parent.setLayout(qt.QVBoxLayout()) self.layout = self.parent.layout() self.parent.show() else: self.parent = parent self.layout = parent.layout()
def __init__(self, *args, **kwargs): qt.QWidget.__init__(self, *args) self.setCaption("Toolbox") self.bricksTab = {} self.bricks = {} topPanel = qt.QFrame(self) self.cmdRefresh = qt.QToolButton(topPanel) self.cmdRefresh.setIconSet(qt.QIconSet(Icons.load("reload"))) qt.QToolTip.add(self.cmdRefresh, "refresh bricks list") qt.QHBoxLayout(topPanel) topPanel.layout().addWidget(qt.QLabel("Available bricks", topPanel), 0, qt.Qt.AlignLeft) topPanel.layout().addWidget(self.cmdRefresh, 0, qt.Qt.AlignRight) qt.QObject.connect(self.cmdRefresh, qt.SIGNAL("clicked()"), self.refresh) self.bricksToolbox = qt.QToolBox(self) qt.QVBoxLayout(self, 5, 5) self.layout().addWidget(topPanel) self.layout().addWidget(self.bricksToolbox)
def __init__(self, parent=None): self.nameSize = 24 self.CrosshairNode = None self.CrosshairNodeObserverTag = None self.frame = qt.QFrame(parent) self.frame.setLayout(qt.QVBoxLayout()) # Set horizontal policy to Ignored to prevent a long segment or volume name making the widget wider. # If the module panel made larger then the image viewers would move and the mouse pointer position # would change in the image, potentially pointing outside the node with the long name, resulting in the # module panel collapsing to the original size, causing an infinite oscillation. qSize = qt.QSizePolicy() qSize.setHorizontalPolicy(qt.QSizePolicy.Ignored) qSize.setVerticalPolicy(qt.QSizePolicy.Preferred) self.frame.setSizePolicy(qSize) modulePath = slicer.modules.dataprobe.path.replace("DataProbe.py", "") self.iconsDIR = modulePath + '/Resources/Icons' self.showImage = False # Used in _createMagnifiedPixmap() self.imageCrop = vtk.vtkExtractVOI() self.canvas = vtk.vtkImageCanvasSource2D() self.painter = qt.QPainter() self.pen = qt.QPen() self._createSmall() # Helper class to calculate and display tensor scalars self.calculateTensorScalars = CalculateTensorScalars() # Observe the crosshair node to get the current cursor position self.CrosshairNode = slicer.mrmlScene.GetFirstNodeByClass( 'vtkMRMLCrosshairNode') if self.CrosshairNode: self.CrosshairNodeObserverTag = self.CrosshairNode.AddObserver( slicer.vtkMRMLCrosshairNode.CursorPositionModifiedEvent, self.processEvent)
def dialogBoxFunction(self): self.deleteAllMsgBox = qt.QDialog(slicer.util.mainWindow()) # self.deleteAllMsgBox.setWindowTitle("Delete All Fiducials?") self.deleteAllMsgBox.setFixedSize(200, 100) self.deleteAllMsgBox.show() self.deleteAllMsgBox.setLayout(qt.QVBoxLayout()) messageLabel = qt.QLabel("Delete All Fiducials?") font = qt.QFont() font.setPointSize(10) messageLabel.setFont(font) self.deleteAllMsgBox.layout().addWidget(messageLabel, 0, 4) yesNoBox = qt.QFrame() yesNoBox.setLayout(qt.QHBoxLayout()) self.deleteAllMsgBox.layout().addWidget(yesNoBox, 0, 4) # # OK button # okButton = qt.QPushButton() okButton.setText("YES") okButton.enabled = True okIcon = qt.QIcon(":/Icons/AnnotationOkDone.png") okButton.setIcon(okIcon) yesNoBox.layout().addWidget(okButton) # # NO button # noButton = qt.QPushButton() noButton.setText("NO") noButton.enabled = True noIcon = qt.QIcon(":/Icons/AnnotationCancel.png") noButton.setIcon(noIcon) yesNoBox.layout().addWidget(noButton) # Connections okButton.connect("clicked()", self.onDeleteAllButton) noButton.connect("clicked()", self.deleteAllMsgBox.hide)
def create(self): self.frame = qt.QFrame(self.parent) self.frame.objectName = 'EditColorFrame' self.frame.setLayout(qt.QHBoxLayout()) self.parent.layout().addWidget(self.frame) self.label = qt.QLabel(self.frame) self.label.setText("Label: ") self.frame.layout().addWidget(self.label) self.labelName = qt.QLabel(self.frame) self.labelName.setText("") self.frame.layout().addWidget(self.labelName) self.colorSpin = qt.QSpinBox(self.frame) self.colorSpin.objectName = 'ColorSpinBox' self.colorSpin.setMaximum(64000) self.colorSpin.setValue(EditUtil.getLabel()) self.colorSpin.setToolTip( "Click colored patch at right to bring up color selection pop up window. Use the 'c' key to bring up color popup menu." ) self.frame.layout().addWidget(self.colorSpin) self.colorPatch = qt.QPushButton(self.frame) self.colorPatch.setObjectName('ColorPatchButton') self.frame.layout().addWidget(self.colorPatch) self.updateParameterNode(slicer.mrmlScene, vtk.vtkCommand.ModifiedEvent) self.updateGUIFromMRML(self.parameterNode, vtk.vtkCommand.ModifiedEvent) self.frame.connect('destroyed()', self.cleanup) self.colorSpin.connect('valueChanged(int)', self.updateMRMLFromGUI) self.colorPatch.connect('clicked()', self.showColorBox) # TODO: change this to look for specfic events (added, removed...) # but this requires being able to access events by number from wrapped code self.addObserver(slicer.mrmlScene, vtk.vtkCommand.ModifiedEvent, self.updateParameterNode)
def numericInputFrame(parent, label, tooltip, minimum, maximum, step, decimals): inputFrame = qt.QFrame(parent) inputFrame.setLayout(qt.QHBoxLayout()) inputLabel = qt.QLabel(label, inputFrame) inputLabel.setToolTip(tooltip) inputFrame.layout().addWidget(inputLabel) inputSpinBox = qt.QDoubleSpinBox(inputFrame) inputSpinBox.setToolTip(tooltip) inputSpinBox.minimum = minimum inputSpinBox.maximum = maximum inputSpinBox.singleStep = step inputSpinBox.decimals = decimals inputFrame.layout().addWidget(inputSpinBox) inputSlider = ctk.ctkDoubleSlider(inputFrame) inputSlider.minimum = minimum inputSlider.maximum = maximum inputSlider.orientation = 1 inputSlider.singleStep = step inputSlider.setToolTip(tooltip) inputFrame.layout().addWidget(inputSlider) return inputFrame, inputSlider, inputSpinBox
def __init__(self, parent): vLayout = qt.QVBoxLayout(parent) self.colorPromptLabel = qt.QLabel() vLayout.addWidget(self.colorPromptLabel) self.colorSelectorFrame = qt.QFrame() self.colorSelectorFrame.objectName = 'ColorSelectorFrame' self.colorSelectorFrame.setLayout(qt.QHBoxLayout()) vLayout.addWidget(self.colorSelectorFrame) self.colorSelectorLabel = qt.QLabel() self.colorSelectorFrame.layout().addWidget(self.colorSelectorLabel) self.colorSelector = slicer.qMRMLColorTableComboBox() self.colorSelector.nodeTypes = ["vtkMRMLColorNode"] self.colorSelector.hideChildNodeTypes = ( "vtkMRMLDiffusionTensorDisplayPropertiesNode", "vtkMRMLProceduralColorNode", "") self.colorSelector.addEnabled = False self.colorSelector.removeEnabled = False self.colorSelector.noneEnabled = False self.colorSelector.selectNodeUponCreation = True self.colorSelector.showHidden = True self.colorSelector.showChildNodeTypes = True self.colorSelector.setMRMLScene(slicer.mrmlScene) self.colorSelector.setToolTip( "Pick the table of structures you wish to edit") vLayout.addWidget(self.colorSelector) self.buttonBox = qt.QDialogButtonBox() self.buttonBox.setStandardButtons(qt.QDialogButtonBox.Ok | qt.QDialogButtonBox.Cancel) vLayout.addWidget(self.buttonBox) self.buttonBox.button(qt.QDialogButtonBox.Ok).setToolTip( "Use currently selected color node.") self.buttonBox.button( qt.QDialogButtonBox.Cancel).setToolTip("Cancel current operation.")