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 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")
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
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)
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
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")
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()
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)
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
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()
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())
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)
"""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)
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()