예제 #1
0
    def addRow(self, c):
        name = self.colorNode.GetColorName(c)
        lut = self.colorNode.GetLookupTable()
        rgb = lut.GetTableValue(c)
        brush = qt.QBrush()
        self.brushes.append(brush)
        color = qt.QColor()
        color.setRgb(rgb[0] * 255, rgb[1] * 255, rgb[2] * 255)
        brush.setColor(color)

        # index
        item = qt.QStandardItem()
        item.setText(str(c))
        self.model.setItem(self.row, 0, item)
        self.items.append(item)
        # color
        item = qt.QStandardItem()
        item.setData(color, 1)
        self.model.setItem(self.row, 1, item)
        self.items.append(item)
        # name
        item = qt.QStandardItem()
        item.setText(self.colorNode.GetColorName(c))
        self.model.setItem(self.row, 2, item)
        self.items.append(item)
        self.row += 1
예제 #2
0
    def onMismatchErrorApply(self):
        print "apply button\n"
        myWLIO = self.logic.RunMismatchError(self.WLIO)
        self.averageError.setText(myWLIO.average)
        self.Variance.setText(myWLIO.variance)
        self.stDev.setText(myWLIO.stdev)
        print "ready to draw table:"
        for dist in myWLIO.landm_distance:
            print dist

    # the table.. - separate into a function?
        self.items = []
        self.model = qt.QStandardItemModel()
        self.view.setModel(self.model)
        self.view.verticalHeader().visible = False
        row = 0
        landmarkcounter = 0
        for dist in myWLIO.landm_distance:
            # 1st column (row,0)
            item = qt.QStandardItem()
            landmarkcounter += 1
            item.setText(landmarkcounter)
            self.model.setItem(row, 0, item)
            self.items.append(item)
            # 2nd column (row,1)
            item = qt.QStandardItem()
            item.setText(dist)
            self.model.setItem(row, 1, item)
            self.items.append(item)
            row += 1
        #done!
        #self.view.setColumnWidth(0,30)
        self.model.setHeaderData(0, 1, "Landmark")
        self.model.setHeaderData(1, 1, "dist, mm")
예제 #3
0
    def populateDistances(self):
        if not self.logic:
            return
        self.items = []
        self.model = qt.QStandardItemModel()
        self.view.setModel(self.model)
        self.view.verticalHeader().visible = False
        row = 0
        for i in self.logic.landmarkPairs["Landmarks"]:
            item = qt.QStandardItem()
            item.setData(points[fixed])
            #item.setToolTip(colorNode.GetColorName(i))
            self.model.setItem(row, 0, item)
            self.items.append(item)
            col = 1
            for k in self.logic.keys:
                item = qt.QStandardItem()
                item.setText(str(self.logic.landmarkPairs[i, k]))
                #item.setToolTip(colorNode.GetColorName(i))
                self.model.setItem(row, col, item)
                self.items.append(item)
                col += 1
            row += 1

        self.view.setColumnWidth(0, 30)
        self.model.setHeaderData(0, 1, " ")
        col = 1
        for k in self.logic.keys:
            self.view.setColumnWidth(col, 15 * len(k))
            self.model.setHeaderData(col, 1, k)
            col += 1
예제 #4
0
    def populateStats(self):
        if not self.logic:
            return
        displayNode = self.labelNode.GetDisplayNode()
        colorNode = displayNode.GetColorNode()
        lut = colorNode.GetLookupTable()
        self.items = []
        self.model = qt.QStandardItemModel()
        self.view.setModel(self.model)
        self.view.verticalHeader().visible = False
        row = 0
        for i in self.logic.labelStats["Labels"]:
            col = 0

            color = qt.QColor()
            rgb = lut.GetTableValue(i)
            color.setRgb(rgb[0] * 255, rgb[1] * 255, rgb[2] * 255)
            item = qt.QStandardItem()
            item.setData(color, qt.Qt.DecorationRole)
            item.setToolTip(colorNode.GetColorName(i))
            item.setEditable(False)
            self.model.setItem(row, col, item)
            self.items.append(item)
            col += 1

            item = qt.QStandardItem()
            item.setData(colorNode.GetColorName(i), qt.Qt.DisplayRole)
            item.setEditable(False)
            self.model.setItem(row, col, item)
            self.items.append(item)
            col += 1

            for k in self.logic.keys:
                item = qt.QStandardItem()
                # set data as float with Qt::DisplayRole
                item.setData(float(self.logic.labelStats[i, k]),
                             qt.Qt.DisplayRole)
                item.setToolTip(colorNode.GetColorName(i))
                item.setEditable(False)
                self.model.setItem(row, col, item)
                self.items.append(item)
                col += 1
            row += 1

        self.view.setColumnWidth(0, 30)
        self.model.setHeaderData(0, 1, " ")
        self.model.setHeaderData(1, 1, "Type")
        col = 2
        for k in self.logic.keys:
            self.view.setColumnWidth(col, 15 * len(k))
            self.model.setHeaderData(col, 1, k)
            col += 1
 def _fillStudiesList(self, pid):
     self._studiesTableModel.removeRows(0,
                                        self._studiesTableModel.rowCount())
     studies = self._patientTableModel.getStudiesForPatient(pid)
     for study in studies:
         series = self.db.seriesForStudy(study)
         self._studiesTableModel.appendRow([
             qt.QStandardItem(study),
             qt.QStandardItem(
                 self.db.fileValue(
                     self.db.filesForSeries(series[0])[0], "0008,0020"
                 ) if len(series) else "")
         ])
     self._studiesTable.horizontalHeader().setSectionResizeMode(
         1, qt.QHeaderView.ResizeToContents)
예제 #6
0
    def PopulateTableStats(self):
        """ Creates the Qt table with the statistics"""

        NewOrderKeys = [
            'Segment', 'Scalar Volume', 'Mean', 'Standard Deviation',
            'Minimum', 'Maximum', 'Median', 'Number of voxels [voxels]',
            'Surface area [mm2]', 'Volume [mm3]', 'Volume [mm3]'
        ]
        self.items = []
        self.model = qt.QStandardItemModel()
        self.table.setModel(self.model)
        self.table.verticalHeader().visible = False
        segmentationNode = self.segmentationSelector.currentNode()
        row = 0
        NofSegments = len(self.statistics['SegmentIDs'])
        I = np.concatenate((np.arange(NofSegments), np.arange(NofSegments)))

        for i in range(len(list(self.stats.values())[0])):
            col = 0
            color = qt.QColor()
            segment = segmentationNode.GetSegmentation().GetSegment(
                self.statistics['SegmentIDs'][I[i]])
            rgb = segment.GetColor()
            color.setRgb(rgb[0] * 255, rgb[1] * 255, rgb[2] * 255)
            item = qt.QStandardItem()
            item.setData(color, qt.Qt.DecorationRole)
            item.setEditable(False)
            self.model.setItem(row, col, item)
            self.items.append(item)
            col += 1
            for k in NewOrderKeys:
                item = qt.QStandardItem()
                item.setData(self.stats[k][i], qt.Qt.DisplayRole)
                item.setEditable(False)
                self.model.setItem(row, col, item)
                self.items.append(item)
                col += 1
            row += 1

        col = 0
        self.table.setColumnWidth(0, 30)
        self.model.setHeaderData(0, 1, " ")
        col += 1

        for k in NewOrderKeys:
            self.table.setColumnWidth(col, 16 * len(k))
            self.model.setHeaderData(col, 1, k)
            col += 1
예제 #7
0
 def populateColors(self):
     self.brushes = []
     self.items = []
     self.model = qt.QStandardItemModel()
     self.view.setModel(self.model)
     pattern = self.search.text
     self.row = 0
     for c in self.recents:
         self.addRow(c)
     if self.recents:
         item = qt.QStandardItem()
         item.setText("--")
         self.model.setItem(self.row, 0, item)
         self.model.setItem(self.row, 1, item)
         self.model.setItem(self.row, 2, item)
         self.items.append(item)
         self.row += 1
     for c in range(self.colorNode.GetNumberOfColors()):
         name = self.colorNode.GetColorName(c)
         if name != "(none)" and name.lower().find(pattern.lower()) >= 0:
             self.addRow(c)
     self.view.setColumnWidth(0, 75)
     self.view.setColumnWidth(1, 50)
     self.view.setColumnWidth(2, 150)
     self.model.setHeaderData(0, 1, "Number")
     self.model.setHeaderData(1, 1, "Color")
     self.model.setHeaderData(2, 1, "Name")
예제 #8
0
 def updateIntraopSeriesSelectorTable(self):
     self.intraopSeriesSelector.blockSignals(True)
     currentIndex = self.intraopSeriesSelector.currentIndex
     self._seriesModel.clear()
     for series in self.session.seriesList:
         sItem = qt.QStandardItem(series)
         self._seriesModel.appendRow(sItem)
         color = COLOR.YELLOW
         if self.session.data.registrationResultWasApproved(series) or \
           (self.session.seriesTypeManager.isCoverTemplate(series) and not self.session.isCoverTemplateTrackable(series)):
             color = COLOR.GREEN
         elif self.session.data.registrationResultWasSkipped(series):
             color = COLOR.RED
         elif self.session.data.registrationResultWasRejected(series):
             color = COLOR.GRAY
         self._seriesModel.setData(sItem.index(), color,
                                   qt.Qt.BackgroundRole)
     self.intraopSeriesSelector.setCurrentIndex(currentIndex)
     self.intraopSeriesSelector.blockSignals(False)
     colorStyle = self.session.getColorForSelectedSeries(
         self.intraopSeriesSelector.currentText)
     self.intraopSeriesSelector.setStyleSheet(
         "QComboBox{%s} QToolTip{background-color: white;}" % colorStyle)
     if self.active and not self.session.isBusy():
         self.selectMostRecentEligibleSeries()
예제 #9
0
 def addByBrowsing(self):
     filePaths = qt.QFileDialog().getOpenFileNames()
     for filePath in filePaths:
         item = qt.QStandardItem()
         item.setText(filePath)
         self.fileModel.setItem(self.fileModel.rowCount(), 0, item)
     properties = self.logic.calculateProperties(filePaths)
     self.updateFileProperties(properties)
 def populateTable(self):
   self.resultsTable.horizontalHeader().visible = True
   self.resultsModel.setHorizontalHeaderLabels(self.result_dataframe.columns)
   [rowCount,columnCount]=self.result_dataframe.shape
   for i in range(rowCount):
     for j in range(columnCount):
       item = qt.QStandardItem()
       item.setText(self.result_dataframe.iloc[i,j])
       self.resultsModel.setItem(i, j, item)
예제 #11
0
    def populateStats(self):
        if not self.logic:
            return
        displayNode = self.labelNode.GetDisplayNode()
        colorNode = displayNode.GetColorNode()
        lut = colorNode.GetLookupTable()
        self.items = []
        self.model = qt.QStandardItemModel()
        self.view.setModel(self.model)
        self.view.verticalHeader().visible = False
        row = 0

        for regionTag, regionValue in zip(self.logic.regionTags,
                                          self.logic.regionValues):
            color = qt.QColor()
            rgb = lut.GetTableValue(regionValue[0])
            color.setRgb(rgb[0] * 255, rgb[1] * 255, rgb[2] * 255)
            item = qt.QStandardItem()
            item.setData(color, 1)
            item.setText(str(regionTag))
            item.setData(regionTag, 1)
            item.setToolTip(regionTag)
            item.setTextAlignment(1)
            self.model.setItem(row, 0, item)
            self.items.append(item)
            col = 1
            for k in self.logic.keys:
                item = qt.QStandardItem()
                item.setText("%.3f" % self.logic.labelStats[k, regionTag])
                item.setTextAlignment(4)
                self.view.setColumnWidth(col, 15 * len(item.text()))
                self.model.setItem(row, col, item)
                self.items.append(item)
                col += 1
            row += 1

        self.view.setColumnWidth(0, 15 * len('Region'))
        self.model.setHeaderData(0, 1, "Region")
        col = 1
        for k in self.logic.keys:
            # self.view.setColumnWidth(col,15*len(k))
            self.model.setHeaderData(col, 1, k)
            col += 1
 def _fillSeriesList(self, studyID):
     # TODO: add smart logic for row selection SR selection only one! if SR selected, don't allow selection of other series
     self._clearSeriesList()
     series = sorted(
         self.db.seriesForStudy(studyID),
         key=lambda a: int(
             self.db.fileValue(self.db.filesForSeries(a)[0], '0020,0011')))
     for rowIdx, s in enumerate(series):
         info = [qt.QStandardItem(s)]
         for tag in ['0020,0011', '0008,0023', '0008,0060', '0008,103E']:
             item = qt.QStandardItem(
                 self.db.fileValue(self.db.filesForSeries(s)[0], tag))
             info.append(item)
         self._seriesTableModel.appendRow(info)
     self._seriesTable.horizontalHeader().setSectionResizeMode(
         1, qt.QHeaderView.ResizeToContents)
     self._seriesTable.horizontalHeader().setSectionResizeMode(
         3, qt.QHeaderView.ResizeToContents)
     self._selectAllButton.enabled = self._seriesTableModel.rowCount() > 0
     self._deselectAllButton.enabled = self._seriesTableModel.rowCount() > 0
예제 #13
0
 def updateIntraopSeriesSelectorTable(self):
   self.intraopSeriesSelector.blockSignals(True)
   currentIndex = self.intraopSeriesSelector.currentIndex
   self._seriesModel.clear()
   for series in self.session.seriesList:
     sItem = qt.QStandardItem(series)
     self._seriesModel.appendRow(sItem)
     color = COLOR.GREEN
     self._seriesModel.setData(sItem.index(), color, qt.Qt.BackgroundRole)
   self.intraopSeriesSelector.setCurrentIndex(currentIndex)
   self.intraopSeriesSelector.blockSignals(False)
   self.intraopSeriesSelector.setStyleSheet("QComboBox{'background-color: green;'} QToolTip{background-color: white;}")
   if self.active and not self.session.isLoading():
     self.selectMostRecentEligibleSeries()
예제 #14
0
    def updateStructures(self, caller=None, event=None):
        """re-build the Structures frame
    - optional caller and event ignored (for use as vtk observer callback)
    """

        if slicer.mrmlScene.IsBatchProcessing():
            return

        if self.mergeButton.destroyed():
            """ TODO: here the python class still exists but the
      Qt widgets are gone - need to figure out when to remove observers
      and free python code - probably the destroyed() signal.
      """
            self.cleanup()
            return

        #self.mergeSelector.setDisabled(not self.master)

        # reset to a fresh model
        self.structures = qt.QStandardItemModel()
        self.structuresView.setModel(self.structures)

        # if no merge volume exists, disable everything - else enable
        merge = self.merge

        self.addStructureButton.setDisabled(not merge)
        self.deleteStructuresButton.setDisabled(not merge)
        self.deleteSelectedStructureButton.setDisabled(not merge)
        self.mergeButton.setDisabled(not merge)
        self.splitButton.setDisabled(not merge)
        self.mergeAndBuildButton.setDisabled(not merge)
        self.replaceModels.setDisabled(not merge)
        if self.mergeValidCommand:
            # will be passed current
            self.mergeValidCommand(merge)

        if not merge:
            return

        colorNode = merge.GetDisplayNode().GetColorNode()
        lut = colorNode.GetLookupTable()

        masterName = self.master.GetName()
        volumeNodes = self.structureVolumes()
        for vNode in volumeNodes:
            vName = vNode.GetName()
            # figure out what name it is
            # - account for the fact that sometimes a number will be added to the end of the name
            start = 1 + len(masterName)
            end = vName.rfind(self.mergeVolumePostfix)
            structureName = vName[start:end]
            structureIndex = colorNode.GetColorIndexByName(structureName)
            structureColor = lut.GetTableValue(structureIndex)[0:3]
            color = qt.QColor()
            color.setRgb(structureColor[0] * 255, structureColor[1] * 255,
                         structureColor[2] * 255)

            # label index
            item = qt.QStandardItem()
            item.setEditable(False)
            item.setText("%03d" % int(structureIndex))
            self.structures.setItem(self.row, 0, item)

            # label color
            item = qt.QStandardItem()
            item.setEditable(False)
            item.setData(color, 1)
            self.structures.setItem(self.row, 1, item)

            # structure name
            item = qt.QStandardItem()
            item.setEditable(False)
            item.setText(structureName)
            self.structures.setItem(self.row, 2, item)

            # volumeName name
            item = qt.QStandardItem()
            item.setEditable(False)
            item.setText(vName)
            self.structures.setItem(self.row, 3, item)

            # sort order
            item = qt.QStandardItem()
            item.setEditable(True)
            item.setText("")
            self.structures.setItem(self.row, 4, item)

            self.row += 1

        for i in range(5):
            self.structuresView.resizeColumnToContents(i)

        self.structures.setHeaderData(0, 1, "Number")
        self.structures.setHeaderData(1, 1, "Color")
        self.structures.setHeaderData(2, 1, "Name")
        self.structures.setHeaderData(3, 1, "Label Volume")
        self.structures.setHeaderData(4, 1, "Order")
        self.structuresView.setModel(self.structures)
        self.structuresView.connect("activated(QModelIndex)",
                                    self.onStructuresClicked)
        self.structuresView.setProperty(
            'SH_ItemView_ActivateItemOnSingleClick', 1)

        self.structureLabelNames = []
        rows = self.structures.rowCount()
        for row in xrange(rows):
            self.structureLabelNames.append(
                self.structures.item(row, 2).text())
예제 #15
0
 def addByBrowsing(self):
   filePaths = qt.QFileDialog().getOpenFileNames()
   for filePath in filePaths:
     item = qt.QStandardItem()
     item.setText(filePath)
     self.fileModel.setItem(self.fileModel.rowCount(), 0, item)
예제 #16
0
    """Create and execute an explorer dialog."""
    dialog = ExplorerDialog(widget)
    dialog.exec_()


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('class_name',
                        help='Create a widget of this class to explore.')
    parser.add_argument('--model',
                        metavar='COLUMNS',
                        type=int,
                        help='Create a model for the widget.')
    args = parser.parse_args()

    app = qt.QApplication([])

    w = getattr(qt, args.class_name)()

    if args.model:
        model = qt.QStandardItemModel(0, args.model)
        for s in ['foo', 'bar', 'baz']:
            row = [
                qt.QStandardItem(c)
                for c in [s] + list(map(str, range(args.model - 1)))
            ]
            model.appendRow(row)
        print(w, model)
        w.setModel(model)
    explore(w)
예제 #17
0
파일: DataProbe.py 프로젝트: satra/Slicer
    def createSmall(self):
        """Make the internals of the widget to display in the
    Data Probe frame (lower left of slicer main window by default)"""
        # top row - things about the viewer itself
        self.viewerFrame = qt.QFrame(self.frame)
        self.viewerFrame.setLayout(qt.QHBoxLayout())
        self.frame.layout().addWidget(self.viewerFrame)
        self.viewerColor = qt.QLabel(self.viewerFrame)
        self.viewerFrame.layout().addWidget(self.viewerColor)
        self.viewerName = qt.QLabel(self.viewerFrame)
        self.viewerFrame.layout().addWidget(self.viewerName)
        self.viewerRAS = qt.QLabel()
        self.viewerFrame.layout().addWidget(self.viewerRAS)
        self.viewerOrient = qt.QLabel()
        self.viewerFrame.layout().addWidget(self.viewerOrient)
        self.viewerSpacing = qt.QLabel()
        self.viewerFrame.layout().addWidget(self.viewerSpacing)
        self.viewerFrame.layout().addStretch(1)

        # the grid - things about the layers
        if True:
            # this method makes labels
            self.layerGrid = qt.QFrame(self.frame)
            self.layerGrid.setLayout(qt.QGridLayout())
            self.frame.layout().addWidget(self.layerGrid)
            layers = ('L', 'F', 'B')
            self.layerNames = {}
            self.layerIJKs = {}
            self.layerValues = {}
            row = 0
            for layer in layers:
                col = 0
                self.layerGrid.layout().addWidget(qt.QLabel(layer), row, col)
                col += 1
                self.layerNames[layer] = qt.QLabel()
                self.layerGrid.layout().addWidget(self.layerNames[layer], row,
                                                  col)
                col += 1
                self.layerIJKs[layer] = qt.QLabel()
                self.layerGrid.layout().addWidget(self.layerIJKs[layer], row,
                                                  col)
                col += 1
                self.layerValues[layer] = qt.QLabel()
                self.layerGrid.layout().addWidget(self.layerValues[layer], row,
                                                  col)
                self.layerGrid.layout().setColumnStretch(col, 100)
                col += 1
                row += 1
        else:
            # this method use a model/view
            self.layerView = qt.QTableView(self.frame)
            self.layerView.verticalHeader().hide()
            self.frame.layout().addWidget(self.layerView)
            self.layerModel = qt.QStandardItemModel()
            self.layerView.setModel(self.layerModel)
            layers = ('L', 'F', 'B')
            self.layerNames = {}
            self.layerIJKs = {}
            self.layerValues = {}
            self.items = []
            row = 0
            for layer in layers:
                col = 0
                item = qt.QStandardItem()
                item.setText(layer)
                self.layerModel.setItem(row, col, item)
                self.items.append(item)
                col += 1
                self.layerNames[layer] = qt.QStandardItem()
                self.layerModel.setItem(row, col, self.layerNames[layer])
                col += 1
                self.layerIJKs[layer] = qt.QStandardItem()
                self.layerModel.setItem(row, col, self.layerIJKs[layer])
                col += 1
                self.layerValues[layer] = qt.QStandardItem()
                self.layerModel.setItem(row, col, self.layerValues[layer])
                col += 1
                row += 1
            self.layerView.setColumnWidth(0, 15)
            self.layerView.setColumnWidth(1, 80)
            self.layerView.setColumnWidth(2, 65)
            self.layerView.setColumnWidth(3, 55)
            self.layerModel.setHeaderData(0, 1, "")
            self.layerModel.setHeaderData(1, 1, "Volume")
            self.layerModel.setHeaderData(2, 1, "IJK")
            self.layerModel.setHeaderData(3, 1, "Value")

        # goto module button
        self.goToModule = qt.QPushButton('->', self.frame)
        self.goToModule.setToolTip(
            'Go to the DataProbe module for more information and options')
        self.frame.layout().addWidget(self.goToModule)
        self.goToModule.connect("clicked()", self.onGoToModule)
        # hide this for now - there's not much to see in the module itself
        self.goToModule.hide()