示例#1
0
    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()
示例#3
0
    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()
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
    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)
示例#9
0
    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
示例#11
0
    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())
示例#12
0
 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)
示例#13
0
    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)
示例#14
0
    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)
示例#15
0
    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)
示例#16
0
    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)
示例#17
0
文件: DataProbe.py 项目: satra/Slicer
    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()
示例#18
0
 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()
示例#19
0
    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)
示例#20
0
    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()
示例#21
0
    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)
示例#22
0
    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)
示例#23
0
    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()
示例#25
0
    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)
示例#26
0
    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)
示例#27
0
    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)
示例#28
0
    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)
示例#29
0
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
示例#30
0
    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.")