def updateTable(self): self.portsTableModel = qt.QStandardItemModel() self.portsTable.setModel(self.portsTableModel) self.transformSliders.reset() self.removePortButton.enabled = False self.transformSliders.setMRMLTransformNode(None) node = self.logic.markupsNode if node is None: return self.itemPortIdxMap = {} for i in range(node.GetNumberOfFiducials()): item = qt.QStandardItem() item.setText(self.logic.getPortName(i)) self.portsTableModel.setItem(i, 0, item) self.itemPortIdxMap[item] = i item = qt.QStandardItem() item.setText('Visible') item.setCheckable(True) if self.logic.isToolVisible(i): checkState = 2 # checked enum else: checkState = 0 # unchecked enum item.setCheckState(checkState) self.portsTableModel.setItem(i, 1, item) self.itemPortIdxMap[item] = i self.portsTableModel.setHeaderData(0, 1, "Port Fiducial Name") self.portsTableModel.setHeaderData(1, 1, " ") self.portsTable.setColumnWidth(0, 15*len("Port Fiducial Name")) self.portsTableModel.itemChanged.connect(self.onTableItemChanged) self.portsTable.selectionModel().currentRowChanged.connect(self.onCurrentToolChanged)
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
def onFillButtonClicked(self): print "Llenado" #Defino modelo para agregar al widget de tabla self.modelo = qt.QStandardItemModel() genMod = self.modelo self.items = [] #Agrego modelo a widget self.vista.setModel(self.modelo) fila = 0 for i in range(1, 8): #objeto item a agregar item = qt.QStandardItem() color = qt.QColor() color.setRgb(0, 250, 0) item.setData(color, 1) #agrego item a modelo fila, columna, item self.modelo.setItem(fila, 0, item) self.items.append(item) columna = 0 for k in range(1, 8): item = qt.QStandardItem() item.setText('Texto') color.setRgb(random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255)) item.setData(color, 1) self.modelo.setItem(fila, columna, item) self.items.append(item) columna += 1 fila += 1 #Hago visible el widget y deshabilito el boton self.vista.visible = True self.fillTable.enabled = False
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 load(self, columnNames, data): """ Load all the information displayed in the table :param columnNames: list of column names :param data: list of rows, each of them with one value per column """ self.items = [] self.statisticsTableModel = qt.QStandardItemModel() self.tableView.setModel(self.statisticsTableModel) self.tableView.verticalHeader().visible = False self.tableView.sortingEnabled = True policy = self.tableView.sizePolicy policy.setVerticalPolicy(qt.QSizePolicy.Expanding) policy.setHorizontalPolicy(qt.QSizePolicy.Expanding) policy.setVerticalStretch(0) self.tableView.setSizePolicy(policy) # Header self.statisticsTableModel.setHorizontalHeaderLabels(columnNames) for row in range(len(data)): rowData = data[row] for col in range(len(rowData)): item = qt.QStandardItem() item.setData(data[row][col], qt.Qt.DisplayRole) item.setEditable(False) self.statisticsTableModel.setItem(row, col,item) self.items.append(item) self.tableView.sortByColumn(0, 1) # Sort by Date Descending
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 xrange(self.colorNode.GetNumberOfColors()): name = self.colorNode.GetColorName(c) if name != "(none)" and name.find(pattern) >= 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")
def populateStatistics(self, FeatureVectors): if not (FeatureVectors): return self.items = [] self.model = qt.QStandardItemModel() row = 0 col = 0 wholeNumberKeys = ['Voxel Count', 'Gray Levels', 'Minimum Intensity', 'Maximum Intensity', 'Median Intensity', 'Range'] precisionOnlyKeys = ['Entropy', 'Volume mm^3', 'Volume cc', 'Mean Intensity', 'Mean Deviation', 'Root Mean Square', 'Standard Deviation', 'Surface Area mm^3'] for featureVector in FeatureVectors: col = 0 for feature in featureVector: item = qt.QStandardItem() value = featureVector[feature] featureFormatted = value # add formatting here item.setText(str(featureFormatted)) item.setToolTip(feature) self.model.setItem(row,col,item) self.items.append(item) col += 1 row += 1 self.model.setHeaderData(0,1," ") # set table headers col = 0 for feature in FeatureVectors[0]: self.model.setHeaderData(col,1,feature) col += 1
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"]: color = qt.QColor() rgb = lut.GetTableValue(i) color.setRgb(rgb[0] * 255, rgb[1] * 255, rgb[2] * 255) item = qt.QStandardItem() item.setData(color, 1) 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() if col == 1: item.setText(self.logic.labelStats[i, k]) else: item.setText("%.3f" % self.logic.labelStats[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
def populateStats(self): """This Logic is copied from the Label Statistics Module -Steve Pieper (Isomics)""" # Populate the table with SegmentCAD label map statistics if not (self.logic and self.statisticsLogic): return displayNode = self.nodeSegmentCAD.GetDisplayNode() colorNode = displayNode.GetColorNode() lut = colorNode.GetLookupTable() self.items = [] self.model = qt.QStandardItemModel() self.labelStatisticsTableView.setModel(self.model) self.labelStatisticsTableView.verticalHeader().visible = False row = 0 for i in self.statisticsLogic.labelStats["Labels"]: color = qt.QColor() rgb = lut.GetTableValue(i) color.setRgb(rgb[0] * 255, rgb[1] * 255, rgb[2] * 255) item = qt.QStandardItem() item.setData(color, 1) item.setToolTip(colorNode.GetColorName(i)) self.model.setItem(row, 0, item) self.items.append(item) col = 1 for k in self.statisticsLogic.keys: item = qt.QStandardItem() item.setText(str(self.statisticsLogic.labelStats[i, k])) item.setToolTip(colorNode.GetColorName(i)) self.model.setItem(row, col, item) self.items.append(item) col += 1 row += 1 self.labelStatisticsTableView.setColumnWidth(0, 30) self.model.setHeaderData(0, 1, " ") col = 1 for k in self.statisticsLogic.keys: self.labelStatisticsTableView.setColumnWidth(col, 15 * len(k)) self.model.setHeaderData(col, 1, k) col += 1
def PopulateRadiomicsTable(self, RadiomicsTableView, RadiomicsTableModel, FeatureVectors): #initialize table with another function #use this function to add a feature vector to the table if not (FeatureVectors): return self.items = [] self.RadiomicsTableModel = qt.QStandardItemModel() self.RadiomicsTableView.setModel(self.RadiomicsTableModel) self.RadiomicsTableView.verticalHeader().visible = False row = 0 col = 0 wholeNumberKeys = [ 'Voxel Count', 'Gray Levels', 'Minimum Intensity', 'Maximum Intensity', 'Median Intensity', 'Range' ] precisionOnlyKeys = [ 'Entropy', 'Volume mm^3', 'Volume cc', 'Mean Intensity', 'Mean Deviation', 'Root Mean Square', 'Standard Deviation', 'Surface Area mm^3' ] for featureVector in FeatureVectors: col = 0 for feature in featureVector: item = qt.QStandardItem() value = featureVector[feature] featureFormatted = value # add formatting here item.setText(str(featureFormatted)) item.setToolTip(feature) self.RadiomicsTableModel.setItem(row, col, item) self.items.append(item) col += 1 row += 1 self.RadiomicsTableView.setColumnWidth(0, 30) self.RadiomicsTableModel.setHeaderData(0, 1, " ") # set table headers col = 0 for feature in FeatureVectors[0]: self.RadiomicsTableView.setColumnWidth(col, 15 * len(feature)) self.RadiomicsTableModel.setHeaderData(col, 1, feature) col += 1
def populateStats(self): if not self.logic: return self.items = [] self.model = qt.QStandardItemModel() self.view.setModel(self.model) row = 0 for i in self.logic.labelStats["Labels"]: col = 0 for k in self.logic.keys: item = qt.QStandardItem() item.setText(str(self.logic.labelStats[i, k])) self.model.setItem(row, col, item) self.items.append(item) col += 1 row += 1 col = 0 for k in self.logic.keys: self.view.setColumnWidth(col, 15 * len(k)) self.model.setHeaderData(col, 1, k) col += 1
def updateStructures(self, caller=None, event=None): """re-build the Structures frame - optional caller and event ignored (for use as vtk observer callback) """ if self.setMergeButton.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.setMergeButton.setDisabled(not self.master) # reset to a fresh model self.brushes = [] self.items = [] self.structures = qt.QStandardItemModel() self.structuresView.setModel(self.structures) # if no merge volume exists, disable everything - else enable merge = self.mergeVolume() self.addStructureButton.setDisabled(not merge) self.deleteStructuresButton.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() slicer.mrmlScene.InitTraversal() vNode = slicer.mrmlScene.GetNextNodeByClass("vtkMRMLScalarVolumeNode") self.row = 0 while vNode: vName = vNode.GetName() # match something like "CT-lung-label1" regexp = "%s-.*-label" % masterName if re.match(regexp, vName): # 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("-label") structureName = vName[start:end] structureIndex = colorNode.GetColorIndexByName(structureName) structureColor = lut.GetTableValue(structureIndex)[0:3] brush = qt.QBrush() self.brushes.append(brush) color = qt.QColor() color.setRgb(structureColor[0] * 255, structureColor[1] * 255, structureColor[2] * 255) brush.setColor(color) # label index item = qt.QStandardItem() item.setEditable(False) item.setText(str(structureIndex)) self.structures.setItem(self.row, 0, item) self.items.append(item) # label color item = qt.QStandardItem() item.setEditable(False) item.setData(color, 1) self.structures.setItem(self.row, 1, item) self.items.append(item) # structure name item = qt.QStandardItem() item.setEditable(False) item.setText(structureName) self.structures.setItem(self.row, 2, item) self.items.append(item) # volumeName name item = qt.QStandardItem() item.setEditable(False) item.setText(vName) self.structures.setItem(self.row, 3, item) self.items.append(item) # sort order item = qt.QStandardItem() item.setEditable(True) item.setText("") self.structures.setItem(self.row, 4, item) self.items.append(item) self.row += 1 vNode = slicer.mrmlScene.GetNextNodeByClass( "vtkMRMLScalarVolumeNode") self.structuresView.setColumnWidth(0, 70) self.structuresView.setColumnWidth(1, 50) self.structuresView.setColumnWidth(2, 60) self.structuresView.setColumnWidth(3, 100) self.structuresView.setColumnWidth(4, 10) 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)
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.setMergeButton.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.setMergeButton.setDisabled(not self.master) # reset to a fresh model self.brushes = [] self.items = [] self.structures = qt.QStandardItemModel() self.structuresView.setModel(self.structures) # if no merge volume exists, disable everything - else enable merge = self.mergeVolume() self.addStructureButton.setDisabled(not merge) self.deleteStructuresButton.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("-label") structureName = vName[start:end] structureIndex = colorNode.GetColorIndexByName( structureName ) structureColor = lut.GetTableValue(structureIndex)[0:3] brush = qt.QBrush() self.brushes.append(brush) color = qt.QColor() color.setRgb(structureColor[0]*255,structureColor[1]*255,structureColor[2]*255) brush.setColor(color) # label index item = qt.QStandardItem() item.setEditable(False) item.setText( "%03d"%int(structureIndex) ) self.structures.setItem(self.row,0,item) self.items.append(item) # label color item = qt.QStandardItem() item.setEditable(False) item.setData(color,1) self.structures.setItem(self.row,1,item) self.items.append(item) # structure name item = qt.QStandardItem() item.setEditable(False) item.setText(structureName) self.structures.setItem(self.row,2,item) self.items.append(item) # volumeName name item = qt.QStandardItem() item.setEditable(False) item.setText(vName) self.structures.setItem(self.row,3,item) self.items.append(item) # sort order item = qt.QStandardItem() item.setEditable(True) item.setText("") self.structures.setItem(self.row,4,item) self.items.append(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())
def populateStats(self): if not self.logic: return displayNode = self.insplabelNode.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 cycle = ['insp'] for i in cycle: 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) 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[i, k, regionTag]) self.model.setItem(row, col, item) self.items.append(item) col += 1 row += 1 self.view.setColumnWidth(0, 30) self.model.setHeaderData(0, 1, "INSP") col = 1 for k in self.logic.keys: self.view.setColumnWidth(col, 15 * len(k)) self.model.setHeaderData(col, 1, k) col += 1 self.itemsexp = [] self.modelexp = qt.QStandardItemModel() self.viewexp.setModel(self.modelexp) self.viewexp.verticalHeader().visible = False row = 0 cycle = ['exp'] for i in cycle: 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) self.modelexp.setItem(row, 0, item) self.itemsexp.append(item) col = 1 for k in self.logic.keys: item = qt.QStandardItem() item.setText("%.3f" % self.logic.labelStats[i, k, regionTag]) self.modelexp.setItem(row, col, item) self.itemsexp.append(item) col += 1 row += 1 self.viewexp.setColumnWidth(0, 30) self.modelexp.setHeaderData(0, 1, "EXP") col = 1 for k in self.logic.keys: self.viewexp.setColumnWidth(col, 15 * len(k)) self.modelexp.setHeaderData(col, 1, k) col += 1