def __init__(self): super(TransformationParameterWidget, self).__init__() self.cancelButton = QPushButton("Cancel") self.cancelButton.clicked.connect(self.cancelButtonClicked) self.applyButton = QPushButton("Apply") self.applyButton.clicked.connect(self.applyButtonClicked) self.mainLayout = QGridLayout() self.mainLayout.setSpacing(0) self.mainLayout.setContentsMargins(0, 0, 0, 0) self.widget = QWidget() self.widget.setLayout(self.mainLayout) self.showControls(False) self.transformationWidget = None layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.addWidget(self.widget, 0, 0, 1, 2) layout.addWidget(self.cancelButton, 1, 0) layout.addWidget(self.applyButton, 1, 1) self.setLayout(layout)
def __init__(self, renderController, parent=None): super(RenderSlicerParamWidget, self).__init__(parent=parent) self.renderController = renderController self.renderController.slicesChanged.connect(self.setSlices) self.renderController.clippingBoxChanged.connect(self.showsClippingBox) self.slicesLabel = QLabel("Show slices for directions:") self.sliceLabelTexts = ["x:", "y:", "z:"] self.sliceLabels = [QLabel(text) for text in self.sliceLabelTexts] self.sliceCheckBoxes = [QCheckBox() for i in range(3)] for index in range(3): self.sliceCheckBoxes[index].clicked.connect(self.checkBoxChanged) self.sliceLabels[index].setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.sliceCheckBoxes[index].setEnabled(True) # Create a nice layout for the labels layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.setColumnStretch(0, 1) layout.setColumnStretch(1, 3) layout.addWidget(self.slicesLabel, 0, 0, 1, -1) for index in range(3): layout.addWidget(self.sliceLabels[index], index+1, 0) layout.addWidget(self.sliceCheckBoxes[index], index+1, 1) # Create option to show clipping box self.clippingCheckBox = QCheckBox() self.clippingCheckBox.clicked.connect(self.clippingCheckBoxChanged) self.clippingLabel = QLabel("Clipping box:") self.clippingLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter) layout.addWidget(self.clippingLabel, 5, 0) layout.addWidget(self.clippingCheckBox, 5, 1) self.setLayout(layout)
def __init__(self, renderController, parent=None): super(RenderParameterWidget, self).__init__(parent=parent) self.renderController = renderController self.renderController.visualizationChanged.connect(self.visualizationLoaded) self.paramWidget = None self.visTypeComboBox = QComboBox() for visualizationType in self.renderController.visualizationTypes: self.visTypeComboBox.addItem(visualizationType) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.setSpacing(10) layout.setContentsMargins(10, 0, 10, 0) if len(self.renderController.visualizationTypes) > 1: layout.addWidget(QLabel("Visualization type:"), 0, 0) layout.addWidget(self.visTypeComboBox, 0, 1) self.setLayout(layout) self.scrollArea = QScrollArea() self.scrollArea.setFrameShape(QFrame.NoFrame) self.scrollArea.setAutoFillBackground(False) self.scrollArea.setAttribute(Qt.WA_TranslucentBackground) self.scrollArea.setWidgetResizable(True) self.visTypeComboBox.currentIndexChanged.connect(self.visTypeComboBoxChanged)
def __init__(self): super(PointsWidget, self).__init__() self.landmarkWidgets = [] self.activeIndex = 0 self.scrollArea = QScrollArea(self) self.scrollArea.setFrameShape(QFrame.NoFrame) self.scrollArea.setAutoFillBackground(False) self.scrollArea.setAttribute(Qt.WA_TranslucentBackground) self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.scrollArea.setWidgetResizable(True) landmarkLocationsLayout = QGridLayout() landmarkLocationsLayout.setSpacing(0) landmarkLocationsLayout.setContentsMargins(0, 0, 0, 0) landmarkLocationsLayout.setAlignment(Qt.AlignTop) self.landmarkLocationsWidget = QWidget() Style.styleWidgetForTab(self.landmarkLocationsWidget) self.landmarkLocationsWidget.setLayout(landmarkLocationsLayout) self.scrollArea.setWidget(self.landmarkLocationsWidget) layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.scrollArea) self.setLayout(layout)
def getParameterWidget(self): """ Returns a widget with sliders / fields with which properties of this volume property can be adjusted. :rtype: QWidget """ layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setAlignment(Qt.AlignTop) self.sliders = [] for index in range(7): slider = QSlider(Qt.Horizontal) slider.setMinimum(0) slider.setMaximum(1000) slider.setValue( int( math.pow(self.sectionsOpacity[index], 1.0 / 3.0) * slider.maximum())) slider.valueChanged.connect(self.valueChanged) self.sliders.append(slider) label = QLabel(self.sectionNames[index]) label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) layout.addWidget(label, index, 0) layout.addWidget(slider, index, 1) try: from ColumnResizer import ColumnResizer columnResizer = ColumnResizer() columnResizer.addWidgetsFromLayout(layout, 0) except Exception, e: print e
def __init__(self, parent): super(ElastixMainDialog, self).__init__(parent) self.transformation = None self.transformations = AppResources.elastixTemplates() self.radioButtons = [] for transformation in self.transformations: self.radioButtons.append(QRadioButton(transformation.name)) self.radioButtons.append(QRadioButton("Load custom parameter file...")) self.radioButtons[0].setChecked(True) self.nextButton = QPushButton("Next") self.nextButton.clicked.connect(self.next) self.cancelButton = QPushButton("Cancel") self.cancelButton.clicked.connect(self.cancel) groupLayout = QVBoxLayout() for radioButton in self.radioButtons: groupLayout.addWidget(radioButton) self.groupBox = QGroupBox("Choose parameter file") self.groupBox.setLayout(groupLayout) self.setModal(True) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.addWidget(self.groupBox, 0, 0, 1, 2) layout.addWidget(self.cancelButton, 1, 0) layout.addWidget(self.nextButton, 1, 1) self.setLayout(layout)
def __init__(self): super(TwoStepLandmarkWidget, self).__init__() self.textFrame = QTextEdit("<p>Place your mouse over the desired " "landmark point. Press 'Space' to shoot a ray through the volume. " "Move the volume around and move the mouse to move the locator. " "Press 'Space' again to define the final place of the landmark.</p>" "<p>You can also use the ray profile to define the landmark's location.</p>") self.textFrame.setReadOnly(True) self.textFrame.setFrameShape(QFrame.NoFrame) self.textFrame.setAutoFillBackground(False) self.textFrame.setAttribute(Qt.WA_TranslucentBackground) self.textFrame.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.textFrame.setStyleSheet("background: #aaa") self.histogramWidget = TrackingHistogramWidget() self.histogramWidget.setMinimumHeight(100) self.histogramWidget.setVisible(False) self.button = QPushButton("Pick current landmark position") self.button.clicked.connect(self.applyButtonClicked) self.button.setVisible(False) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.textFrame) layout.addWidget(self.histogramWidget) layout.addWidget(self.button) self.setLayout(layout)
def __init__(self): super(TwoStepLandmarkWidget, self).__init__() self.textFrame = QTextEdit( "<p>Place your mouse over the desired " "landmark point. Press 'Space' to shoot a ray through the volume. " "Move the volume around and move the mouse to move the locator. " "Press 'Space' again to define the final place of the landmark.</p>" "<p>You can also use the ray profile to define the landmark's location.</p>" ) self.textFrame.setReadOnly(True) self.textFrame.setFrameShape(QFrame.NoFrame) self.textFrame.setAutoFillBackground(False) self.textFrame.setAttribute(Qt.WA_TranslucentBackground) self.textFrame.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.textFrame.setStyleSheet("background: #aaa") self.histogramWidget = TrackingHistogramWidget() self.histogramWidget.setMinimumHeight(100) self.histogramWidget.setVisible(False) self.button = QPushButton("Pick current landmark position") self.button.clicked.connect(self.applyButtonClicked) self.button.setVisible(False) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.textFrame) layout.addWidget(self.histogramWidget) layout.addWidget(self.button) self.setLayout(layout)
def getParameterWidget(self): """ Returns a widget with sliders / fields with which properties of this volume property can be adjusted. :rtype: QWidget """ layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setAlignment(Qt.AlignTop) self.sliders = [] for index in range(7): slider = QSlider(Qt.Horizontal) slider.setMinimum(0) slider.setMaximum(1000) slider.setValue(int(math.pow(self.sectionsOpacity[index], 1.0/3.0) * slider.maximum())) slider.valueChanged.connect(self.valueChanged) self.sliders.append(slider) label = QLabel(self.sectionNames[index]) label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) layout.addWidget(label, index, 0) layout.addWidget(slider, index, 1) try: from ColumnResizer import ColumnResizer columnResizer = ColumnResizer() columnResizer.addWidgetsFromLayout(layout, 0) except Exception, e: print e
def getParameterWidget(self): matrixLayout = QGridLayout() matrixLayout.setAlignment(Qt.AlignTop) matrixLayout.setContentsMargins(0, 0, 0, 0) matrixLayout.setSpacing(5) matrixLayout.addWidget(QLabel("Transformation matrix:"), 0, 0, 1, 4) self.m1Edits = [QLineEdit() for _ in range(4)] self.m2Edits = [QLineEdit() for _ in range(4)] self.m3Edits = [QLineEdit() for _ in range(4)] self.m4Edits = [QLineEdit() for _ in range(4)] self.initLineEdits(self.m1Edits, matrixLayout, 1, 0) self.initLineEdits(self.m2Edits, matrixLayout, 2, 0) self.initLineEdits(self.m3Edits, matrixLayout, 3, 0) self.initLineEdits(self.m4Edits, matrixLayout, 4, 0) expandingWidget = QWidget() expandingWidget.setSizePolicy( QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) matrixLayout.addWidget(expandingWidget, 5, 0, 1, 4) matrixWidget = QWidget() matrixWidget.setLayout(matrixLayout) self.transformUpdated( self.renderWidget.transformations.completeTransform()) return matrixWidget
def __init__(self): super(LandmarkLocationWidget, self).__init__() self._active = False self._font = QFont() self._font.setPointSize(10) self.indexLabel = QLabel() self.indexLabel.setMaximumWidth(8) self.indexLabel.setMinimumWidth(8) self.doneButton = QPushButton("Done") self.doneButton.setMaximumWidth(50) self.doneButton.setFont(self._font) self.doneButton.clicked.connect(self.doneButtonClicked) self.fixedButton = QPushButton("") self.fixedButton.setFont(self._font) self.movingButton = QPushButton("") self.movingButton.setFont(self._font) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.setContentsMargins(0, 0, 0, 0) layout.setHorizontalSpacing(4) layout.setVerticalSpacing(0) layout.addWidget(self.indexLabel, 0, 0) layout.addWidget(self.fixedButton, 0, 1) layout.addWidget(self.movingButton, 0, 2) layout.addWidget(self.doneButton, 0, 3) self.setLayout(layout) self._updateState()
def __init__(self, renderController, parent=None): super(RenderSlicerParamWidget, self).__init__(parent=parent) self.renderController = renderController self.renderController.slicesChanged.connect(self.setSlices) self.renderController.clippingBoxChanged.connect(self.showsClippingBox) self.renderController.clippingPlanesChanged.connect(self.showsClippingPlanes) self.sliceLabelTexts = ["Axial:", "Coronal:", "Sagittal:"] self.sliceLabels = [QLabel(text) for text in self.sliceLabelTexts] self.sliceCheckBoxes = [QCheckBox() for i in range(3)] for index in range(3): self.sliceCheckBoxes[index].clicked.connect(self.checkBoxChanged) self.sliceLabels[index].setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.sliceCheckBoxes[index].setEnabled(True) slicesLayout = QGridLayout() slicesLayout.setAlignment(Qt.AlignTop) for index in range(3): slicesLayout.addWidget(self.sliceLabels[index], index+1, 0) slicesLayout.addWidget(self.sliceCheckBoxes[index], index+1, 1) self.slicesGroupBox = QGroupBox() self.slicesGroupBox.setTitle("Visible slices") self.slicesGroupBox.setLayout(slicesLayout) # Create option to show clipping box self.clippingCheckBox = QCheckBox() self.clippingCheckBox.setChecked(self.renderController.clippingBox) self.clippingCheckBox.clicked.connect(self.clippingCheckBoxChanged) self.clippingPlanesCheckBox = QCheckBox() self.clippingPlanesCheckBox.setChecked(self.renderController.clippingPlanes) self.clippingPlanesCheckBox.clicked.connect(self.clippingPlanesCheckBoxChanged) self.resetButton = QPushButton("Reset") self.resetButton.clicked.connect(self.resetClippingBox) clippingLabel = QLabel("Clipping box:") clippingLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter) clippingPlanesLabel = QLabel("Clipping planes:") clippingPlanesLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter) clipLayout = QGridLayout() clipLayout.addWidget(clippingLabel, 0, 0) clipLayout.addWidget(self.clippingCheckBox, 0, 1) clipLayout.addWidget(clippingPlanesLabel, 1, 0) clipLayout.addWidget(self.clippingPlanesCheckBox, 1, 1) clipLayout.addWidget(self.resetButton, 2, 0) self.clippingGroupBox = QGroupBox() self.clippingGroupBox.setTitle("Clipping box") self.clippingGroupBox.setLayout(clipLayout) # Create a nice layout for the labels layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.addWidget(self.slicesGroupBox, 0, 0) layout.addWidget(self.clippingGroupBox, 0, 1) self.setLayout(layout)
def getParameterWidget(self): """ Returns a widget with sliders / fields with which properties of this volume property can be adjusted. :rtype: QWidget """ layout = QGridLayout() layout.setAlignment(Qt.AlignTop) widget = QWidget() widget.setLayout(layout) return widget
def createDragOverlay(self, tags, texts, images=None): """Creates a DragOverlay for this ModuleFrame with the given text and optional images. When DataIndexMimes (DataTree indices) are dropped on the text/images of this overlay, they are associated with the tag of the same index of the text/image. This is a user interface for when a ModuleFrame wants to accept drops for multiple purposes. """ self.dragOverlay = True self.overlay = OverlayFrame(self) layout = QGridLayout(self.overlay) layout.setAlignment(Qt.AlignCenter) layout.setColumnStretch(0, 5) if images is not None: for i, tag, text, image in zip(range(len(tags)), tags, texts, images): layout.addWidget( DropPanel(tag, text, self.overlay, self.overlayDroppedData, image), i, 0, 1, 1) layout.setRowStretch(i, 5) else: for i, tag, text in zip(range(len(tags)), tags, texts): layout.addWidget( DropPanel(tag, text, self.overlay, self.overlayDroppedData), i, 0, 1, 1) layout.setRowStretch(i, 5) # Add a Close button to deal with lack of cancel signal # for drag/drop class CloseLabel(QLabel): closeSignal = Signal() def __init__(self): super(CloseLabel, self).__init__("Close") self.setStyleSheet("QLabel { color : white; }") def mousePressEvent(self, e): self.closeSignal.emit() closeButton = CloseLabel() closeButton.closeSignal.connect(self.killRogueOverlays) layout.addWidget(closeButton, len(tags), 0, 1, 1) layout.setRowStretch(len(tags), 0) self.overlay.setLayout(layout)
def getParameterWidget(self): self.hueSlider = QSlider(Qt.Horizontal) self.hueSlider.setMaximum(360) self.hueSlider.setValue(self.fixedHue) self.hueSlider.valueChanged.connect(self.valueChanged) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.addWidget(QLabel("Base hue"), 0, 0) layout.addWidget(self.hueSlider, 0, 1) widget = QWidget() widget.setLayout(layout) return widget
def __init__(self): super(LandmarkWidget, self).__init__() self.histogramWidget = TrackingHistogramWidget() self.button = QPushButton("Pick current landmark position") self.button.clicked.connect(self.applyButtonClicked) self.button.setVisible(False) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.addWidget(QLabel("Ray profile:")) layout.addWidget(self.histogramWidget) layout.addWidget(self.button) self.setLayout(layout)
def create_grid_layout(self, rows=0, columns=1, v_margin=0, h_margin=0): """ Returns a new GUI toolkit neutral grid layout manager which supports a (rows,columns) sized grid, with each grid element having (v_margin,h_margin) pixels of space around it. If rows is 0, the number of rows is not predefined, but will be determined by the actual number of controls added to the layout. """ layout = QGridLayout() layout.setHorizontalSpacing(h_margin) layout.setVerticalSpacing(v_margin) layout.setAlignment(Qt.AlignTop) ### PYSIDE: layout.setMargin( 4 ) return layout_adapter(layout, columns=columns)
def getParameterWidget(self): titleLabel = QLabel(self.transformation.name) paramWidget = ParameterWidget() paramWidget.parameterModel.setTransformation(self.transformation) layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) layout.setAlignment(Qt.AlignTop) layout.addWidget(titleLabel) layout.addWidget(paramWidget) widget = QWidget() widget.setLayout(layout) return widget
def __init__(self, parent=None): super(EditPreferencesDlg, self).__init__(parent) self.setWindowTitle("Preferences") # define widgets pref_list = QListWidget() pref_list.addItem("General") pref_list.addItem("Display") pref_list.setMaximumWidth(150) pref_list.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) button_box = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel) general_page = QWidget() general_layout = QGridLayout() general_layout.setAlignment(Qt.AlignTop) general_layout.addWidget(QLabel("<b>General</b>"), 0, 0) general_page.setLayout(general_layout) display_page = QWidget() display_layout = QGridLayout() display_layout.setAlignment(Qt.AlignTop) display_layout.addWidget(QLabel("<b>Display Options</b>"), 0, 0) self.multitabs_checkbox = QCheckBox("Limit the display of tabs to one relief device (and the device's scenarios) at a time") if parent.limit_tabs is True: self.multitabs_checkbox.setChecked(True) display_layout.addWidget(self.multitabs_checkbox, 1, 0) display_page.setLayout(display_layout) stacked_widget = QStackedWidget() for page in general_page, display_page: stacked_widget.addWidget(page) main_layout = QVBoxLayout() widgets_layout = QHBoxLayout() widgets_layout.addWidget(pref_list) widgets_layout.addWidget(stacked_widget) buttons_layout = QHBoxLayout() buttons_layout.addStretch() buttons_layout.addWidget(button_box) main_layout.addLayout(widgets_layout) main_layout.addLayout(buttons_layout) self.setLayout(main_layout) pref_list.currentRowChanged.connect(stacked_widget.setCurrentIndex) button_box.accepted.connect(self.accept) button_box.rejected.connect(self.reject)
def createDragOverlay(self, tags, texts, images=None): """Creates a DragOverlay for this ModuleFrame with the given text and optional images. When DataIndexMimes (DataTree indices) are dropped on the text/images of this overlay, they are associated with the tag of the same index of the text/image. This is a user interface for when a ModuleFrame wants to accept drops for multiple purposes. """ self.dragOverlay = True self.overlay = OverlayFrame(self) layout = QGridLayout(self.overlay) layout.setAlignment(Qt.AlignCenter) layout.setColumnStretch(0, 5) if images is not None: for i, tag, text, image in zip(range(len(tags)), tags, texts, images): layout.addWidget(DropPanel(tag, text, self.overlay, self.overlayDroppedData, image), i, 0, 1, 1) layout.setRowStretch(i, 5) else: for i, tag, text in zip(range(len(tags)), tags, texts): layout.addWidget(DropPanel(tag, text, self.overlay, self.overlayDroppedData), i, 0, 1, 1) layout.setRowStretch(i, 5) # Add a Close button to deal with lack of cancel signal # for drag/drop class CloseLabel(QLabel): closeSignal = Signal() def __init__(self): super(CloseLabel, self).__init__("Close") self.setStyleSheet("QLabel { color : white; }") def mousePressEvent(self, e): self.closeSignal.emit() closeButton = CloseLabel() closeButton.closeSignal.connect(self.killRogueOverlays) layout.addWidget(closeButton, len(tags), 0, 1, 1) layout.setRowStretch(len(tags), 0) self.overlay.setLayout(layout)
def __init__(self, parent=None): super(AreaPage, self).__init__(parent) name_label = QLabel("Name:") self.name_lineedit = QLineEdit() self.name_lineedit.setReadOnly(True) devicenum_label = QLabel("Number of devices in this relief device area:") self.devicenum_lineedit = QLineEdit() self.devicenum_lineedit.setReadOnly(True) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.addWidget(name_label, 0, 0) layout.addWidget(self.name_lineedit, 0, 1) layout.addWidget(devicenum_label, 1, 0) layout.addWidget(self.devicenum_lineedit, 1, 1) self.setLayout(layout) self.mapper = QDataWidgetMapper()
def getParameterWidget(self): self.labelFixedOpacity = QLabel("Fixed:") self.labelFixedOpacity.setAlignment(Qt.AlignRight) self.labelMovingOpacity = QLabel("Moving:") self.labelMovingOpacity.setAlignment(Qt.AlignRight) self.sliderFixedOpacity = QSlider(Qt.Horizontal) self.sliderFixedOpacity.setValue( pow(self.fixedOpacity, 1.0 / 3.0) * 100.0) self.sliderMovingOpacity = QSlider(Qt.Horizontal) self.sliderMovingOpacity.setValue( pow(self.movingOpacity, 1.0 / 3.0) * 100.0) self.blendTypeComboBox = QComboBox() self.blendTypeComboBox.addItem("Default additive blend") self.blendTypeComboBox.addItem("Difference blend") self.blendTypeComboBox.currentIndexChanged.connect(self.valueChanged) # Be sure to connect after the values are set... self.sliderFixedOpacity.valueChanged.connect(self.valueChanged) self.sliderMovingOpacity.valueChanged.connect(self.valueChanged) groupLayout = QGridLayout() groupLayout.setAlignment(Qt.AlignTop) groupLayout.addWidget(self.labelFixedOpacity, 0, 0) groupLayout.addWidget(self.sliderFixedOpacity, 0, 1) groupLayout.addWidget(self.labelMovingOpacity, 1, 0) groupLayout.addWidget(self.sliderMovingOpacity, 1, 1) groupBox = QGroupBox() groupBox.setTitle("Opacity:") groupBox.setLayout(groupLayout) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.addWidget(groupBox) widget = QWidget() widget.setLayout(layout) return widget
def __init__(self): super(SurfaceLandmarkWidget, self).__init__() self.textFrame = QTextEdit("<p>Hold your mouse over the volume " "to move the locator. To create a landmark, press 'Space'.</p>" "<p>When you want to proceed to the following landmark, " "click the 'Done' button behind the landmark pair in the " "center of the window.</p>") self.textFrame.setReadOnly(True) self.textFrame.setFrameShape(QFrame.NoFrame) self.textFrame.setAutoFillBackground(False) self.textFrame.setAttribute(Qt.WA_TranslucentBackground) self.textFrame.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.textFrame.setStyleSheet("background: #aaa") layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.textFrame) self.setLayout(layout)
def __init__(self, parent): super(PickerTypeDialog, self).__init__(parent) self.pickerType = None self.pickerTypes = [(SurfaceType, "Surface picker"), (TwoStepType, "Two step picker")] self.radioButtons = [] for picker in self.pickerTypes: self.radioButtons.append(QRadioButton(picker[1])) # self.radioButtons[0].setChecked(True) self.buttonGroup = QButtonGroup() ind = 0 for button in self.radioButtons: self.buttonGroup.addButton(button) self.buttonGroup.setId(button, ind) ind += 1 self.nextButton = QPushButton("Choose") self.nextButton.clicked.connect(self.choose) self.cancelButton = QPushButton("Cancel") self.cancelButton.clicked.connect(self.cancel) groupLayout = QVBoxLayout() for radioButton in self.radioButtons: groupLayout.addWidget(radioButton) self.groupBox = QGroupBox("Choose picker type:") self.groupBox.setLayout(groupLayout) self.setModal(True) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.addWidget(self.groupBox, 0, 0, 1, 2) layout.addWidget(self.cancelButton, 1, 0) layout.addWidget(self.nextButton, 1, 1) self.setLayout(layout)
def __init__(self): super(SurfaceLandmarkWidget, self).__init__() self.textFrame = QTextEdit( "<p>Hold your mouse over the volume " "to move the locator. To create a landmark, press 'Space'.</p>" "<p>When you want to proceed to the following landmark, " "click the 'Done' button behind the landmark pair in the " "center of the window.</p>") self.textFrame.setReadOnly(True) self.textFrame.setFrameShape(QFrame.NoFrame) self.textFrame.setAutoFillBackground(False) self.textFrame.setAttribute(Qt.WA_TranslucentBackground) self.textFrame.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.textFrame.setStyleSheet("background: #aaa") layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.textFrame) self.setLayout(layout)
def getParameterWidget(self): self.pointsWidget = PointsWidget() self.landmarkComboBox = QComboBox() self.landmarkComboBox.addItem("Rigid body") self.landmarkComboBox.addItem("Similarity") self.landmarkComboBox.addItem("Affine") layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(QLabel("Transform type:"), 0, 0) layout.addWidget(self.landmarkComboBox, 0, 1) layout.addWidget(self.pointsWidget, 1, 0, 1, 2) self.updatedLandmarks.connect(self.pointsWidget.setPoints) self.landmarkComboBox.currentIndexChanged.connect(self.landmarkTransformTypeChanged) self.pointsWidget.activeLandmarkChanged.connect(self.setActiveLandmark) self.pointsWidget.landmarkDeleted.connect(self.deleteLandmark) widget = QWidget() widget.setLayout(layout) return widget
def __init__(self): super(LandmarkWidget, self).__init__() self.typeLabel = QLabel("Picker type:") self.typeCombo = QComboBox() self.typeCombo.addItem("Surface") self.typeCombo.addItem("Two step") self.typeCombo.currentIndexChanged.connect(self.comboboxChanged) self.surfaceWidget = SurfaceLandmarkWidget() self.twoStepWidget = TwoStepLandmarkWidget() self.surfaceWidget.setHidden(True) self.twoStepWidget.setHidden(True) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.addWidget(self.typeLabel, 0, 0) layout.addWidget(self.typeCombo, 0, 1) layout.addWidget(self.surfaceWidget, 1, 0, 1, 2) layout.addWidget(self.twoStepWidget, 2, 0, 1, 2) self.setLayout(layout) self.update()
def getParameterWidget(self): matrixLayout = QGridLayout() matrixLayout.setAlignment(Qt.AlignTop) matrixLayout.setContentsMargins(0, 0, 0, 0) matrixLayout.setSpacing(5) matrixLayout.addWidget(QLabel("Transformation matrix:"), 0, 0, 1, 4) self.m1Edits = [QLineEdit() for _ in range(4)] self.m2Edits = [QLineEdit() for _ in range(4)] self.m3Edits = [QLineEdit() for _ in range(4)] self.m4Edits = [QLineEdit() for _ in range(4)] self.initLineEdits(self.m1Edits, matrixLayout, 1, 0) self.initLineEdits(self.m2Edits, matrixLayout, 2, 0) self.initLineEdits(self.m3Edits, matrixLayout, 3, 0) self.initLineEdits(self.m4Edits, matrixLayout, 4, 0) expandingWidget = QWidget() expandingWidget.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) matrixLayout.addWidget(expandingWidget, 5, 0, 1, 4) matrixWidget = QWidget() matrixWidget.setLayout(matrixLayout) self.transformUpdated(self.renderWidget.transformations.completeTransform()) return matrixWidget
def getParameterWidget(self): self.pointsWidget = PointsWidget() self.landmarkComboBox = QComboBox() self.landmarkComboBox.addItem("Rigid body") self.landmarkComboBox.addItem("Similarity") self.landmarkComboBox.addItem("Affine") layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(QLabel("Transform type:"), 0, 0) layout.addWidget(self.landmarkComboBox, 0, 1) layout.addWidget(self.pointsWidget, 1, 0, 1, 2) self.updatedLandmarks.connect(self.pointsWidget.setPoints) self.landmarkComboBox.currentIndexChanged.connect( self.landmarkTransformTypeChanged) self.pointsWidget.activeLandmarkChanged.connect(self.setActiveLandmark) self.pointsWidget.landmarkDeleted.connect(self.deleteLandmark) widget = QWidget() widget.setLayout(layout) return widget
def __init__(self, renderController, parent=None): super(RenderSlicerParamWidget, self).__init__(parent=parent) self.renderController = renderController self.renderController.slicesChanged.connect(self.setSlices) self.renderController.clippingBoxChanged.connect(self.showsClippingBox) self.slicesLabel = QLabel("Show slices for directions:") self.sliceLabelTexts = ["x:", "y:", "z:"] self.sliceLabels = [QLabel(text) for text in self.sliceLabelTexts] self.sliceCheckBoxes = [QCheckBox() for i in range(3)] for index in range(3): self.sliceCheckBoxes[index].clicked.connect(self.checkBoxChanged) self.sliceLabels[index].setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.sliceCheckBoxes[index].setEnabled(True) # Create a nice layout for the labels layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.setColumnStretch(0, 1) layout.setColumnStretch(1, 3) layout.addWidget(self.slicesLabel, 0, 0, 1, -1) for index in range(3): layout.addWidget(self.sliceLabels[index], index + 1, 0) layout.addWidget(self.sliceCheckBoxes[index], index + 1, 1) # Create option to show clipping box self.clippingCheckBox = QCheckBox() self.clippingCheckBox.clicked.connect(self.clippingCheckBoxChanged) self.clippingLabel = QLabel("Clipping box:") self.clippingLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter) layout.addWidget(self.clippingLabel, 5, 0) layout.addWidget(self.clippingCheckBox, 5, 1) self.setLayout(layout)
def __init__(self, renderController, parent=None): super(RenderSlicerParamWidget, self).__init__(parent=parent) self.renderController = renderController self.renderController.slicesChanged.connect(self.setSlices) self.renderController.clippingBoxChanged.connect(self.showsClippingBox) self.renderController.clippingPlanesChanged.connect( self.showsClippingPlanes) self.sliceLabelTexts = ["Axial:", "Coronal:", "Sagittal:"] self.sliceLabels = [QLabel(text) for text in self.sliceLabelTexts] self.sliceCheckBoxes = [QCheckBox() for i in range(3)] for index in range(3): self.sliceCheckBoxes[index].clicked.connect(self.checkBoxChanged) self.sliceLabels[index].setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.sliceCheckBoxes[index].setEnabled(True) slicesLayout = QGridLayout() slicesLayout.setAlignment(Qt.AlignTop) for index in range(3): slicesLayout.addWidget(self.sliceLabels[index], index + 1, 0) slicesLayout.addWidget(self.sliceCheckBoxes[index], index + 1, 1) self.slicesGroupBox = QGroupBox() self.slicesGroupBox.setTitle("Visible slices") self.slicesGroupBox.setLayout(slicesLayout) # Create option to show clipping box self.clippingCheckBox = QCheckBox() self.clippingCheckBox.setChecked(self.renderController.clippingBox) self.clippingCheckBox.clicked.connect(self.clippingCheckBoxChanged) self.clippingPlanesCheckBox = QCheckBox() self.clippingPlanesCheckBox.setChecked( self.renderController.clippingPlanes) self.clippingPlanesCheckBox.clicked.connect( self.clippingPlanesCheckBoxChanged) self.resetButton = QPushButton("Reset") self.resetButton.clicked.connect(self.resetClippingBox) clippingLabel = QLabel("Clipping box:") clippingLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter) clippingPlanesLabel = QLabel("Clipping planes:") clippingPlanesLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter) clipLayout = QGridLayout() clipLayout.addWidget(clippingLabel, 0, 0) clipLayout.addWidget(self.clippingCheckBox, 0, 1) clipLayout.addWidget(clippingPlanesLabel, 1, 0) clipLayout.addWidget(self.clippingPlanesCheckBox, 1, 1) clipLayout.addWidget(self.resetButton, 2, 0) self.clippingGroupBox = QGroupBox() self.clippingGroupBox.setTitle("Clipping box") self.clippingGroupBox.setLayout(clipLayout) # Create a nice layout for the labels layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.addWidget(self.slicesGroupBox, 0, 0) layout.addWidget(self.clippingGroupBox, 0, 1) self.setLayout(layout)
def getParameterWidget(self): """ Returns a widget with sliders / fields with which properties of this volume property can be adjusted. :rtype: QWidget """ self.lowerBoundSlider = SliderFloatWidget() self.lowerBoundSlider.setName("Lower:") self.lowerBoundSlider.setRange([self.minimum, self.maximum]) self.lowerBoundSlider.setValue(self.lowerBound) self.lowerBoundSlider.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.lowerBoundSlider.valueChanged.connect(self.valueChanged) self.upperBoundSlider = SliderFloatWidget() self.upperBoundSlider.setName("Upper:") self.upperBoundSlider.setRange([self.minimum, self.maximum]) self.upperBoundSlider.setValue(self.upperBound) self.upperBoundSlider.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.upperBoundSlider.valueChanged.connect(self.valueChanged) layoutGroup = QGridLayout() layoutGroup.setAlignment(Qt.AlignTop) layoutGroup.setContentsMargins(5, 0, 0, 0) layoutGroup.setSpacing(0) layoutGroup.addWidget(self.lowerBoundSlider) layoutGroup.addWidget(self.upperBoundSlider) groupbox = QGroupBox("Thresholds:") groupbox.setLayout(layoutGroup) self.opacitySlider = SliderFloatWidget() self.opacitySlider.setName("Opacity:") self.opacitySlider.setRange([0.0, 1.0]) self.opacitySlider.setValue(self.opacity) self.opacitySlider.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.opacitySlider.valueChanged.connect(self.valueChanged) self.colorChooser = ColorChoiceWidget() self.colorChooser.setName("Color:") self.colorChooser.setColors(self.colors) self.colorChooser.setColor(self.color) self.colorChooser.setMinimumHeight( self.upperBoundSlider.sizeHint().height()) self.colorChooser.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.colorChooser.valueChanged.connect(self.valueChanged) otherLayoutGroup = QGridLayout() otherLayoutGroup.setAlignment(Qt.AlignTop) otherLayoutGroup.setContentsMargins(5, 0, 0, 0) otherLayoutGroup.setSpacing(0) otherLayoutGroup.addWidget(self.opacitySlider) # otherLayoutGroup.addWidget(self.colorChooser) # otherBox = QGroupBox("Color and opacity:") otherBox = QGroupBox() otherBox.setLayout(otherLayoutGroup) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.setContentsMargins(0, 0, 0, 0) layout.setHorizontalSpacing(0) layout.addWidget(groupbox) layout.addWidget(otherBox) widget = QWidget() widget.setLayout(layout) try: from ColumnResizer import ColumnResizer self.columnResizer = ColumnResizer() self.columnResizer.addWidgetsFromLayout( self.lowerBoundSlider.layout(), 0) self.columnResizer.addWidgetsFromLayout( self.upperBoundSlider.layout(), 0) self.columnResizer.addWidgetsFromLayout(self.colorChooser.layout(), 0) self.columnResizer.addWidgetsFromLayout( self.opacitySlider.layout(), 0) self.otherColRes = ColumnResizer() self.otherColRes.addWidgetsFromLayout( self.lowerBoundSlider.layout(), 2) self.otherColRes.addWidgetsFromLayout( self.upperBoundSlider.layout(), 2) self.otherColRes.addWidgetsFromLayout(self.opacitySlider.layout(), 2) except Exception, e: print e
def getParameterWidget(self): """ Returns a widget with sliders / fields with which properties of this volume property can be adjusted. :rtype: QWidget """ self.brightnessSlider = QSlider(Qt.Horizontal) self.brightnessSlider.setMinimum(0) self.brightnessSlider.setMaximum(500) self.brightnessSlider.setValue(int(self.brightness)) self.brightnessSlider.valueChanged.connect(self.valueChanged) self.brightnessLabel = QLabel(str(self.brightness/100.0)) self.windowSlider = QSlider(Qt.Horizontal) self.windowSlider.setMinimum(0) self.windowSlider.setMaximum(int(abs(self.maximum - self.minimum))) self.windowSlider.setValue(int(self.window)) self.windowSlider.valueChanged.connect(self.valueChanged) self.windowLabel = QLabel(str(self.window)) self.levelSlider = QSlider(Qt.Horizontal) self.levelSlider.setMinimum(int(self.minimum)) self.levelSlider.setMaximum(int(self.maximum)) self.levelSlider.setValue(int(self.level)) self.levelSlider.valueChanged.connect(self.valueChanged) self.levelLabel = QLabel(str(self.level)) self.lowerBoundSlider = QSlider(Qt.Horizontal) self.lowerBoundSlider.setMinimum(int(self.minimum)) self.lowerBoundSlider.setMaximum(int(self.maximum)) self.lowerBoundSlider.setValue(int(self.lowerBound)) self.lowerBoundSlider.valueChanged.connect(self.valueChanged) self.lowerBoundLabel = QLabel(str(self.lowerBound)) self.upperBoundSlider = QSlider(Qt.Horizontal) self.upperBoundSlider.setMinimum(int(self.minimum)) self.upperBoundSlider.setMaximum(int(self.maximum)) self.upperBoundSlider.setValue(int(self.upperBound)) self.upperBoundSlider.valueChanged.connect(self.valueChanged) self.upperBoundLabel = QLabel(str(self.upperBound)) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(QLabel("Window"), 0, 0) layout.addWidget(self.windowSlider, 0, 1) layout.addWidget(self.windowLabel, 0, 2) layout.addWidget(QLabel("Level"), 1, 0) layout.addWidget(self.levelSlider, 1, 1) layout.addWidget(self.levelLabel, 1, 2) layout.addWidget(QLabel("Brightness"), 2, 0) layout.addWidget(self.brightnessSlider, 2, 1) layout.addWidget(self.brightnessLabel, 2, 2) layout.addWidget(QLabel("Lower threshold"), 3, 0) layout.addWidget(self.lowerBoundSlider, 3, 1) layout.addWidget(self.lowerBoundLabel, 3, 2) layout.addWidget(QLabel("Upper threshold"), 4, 0) layout.addWidget(self.upperBoundSlider, 4, 1) layout.addWidget(self.upperBoundLabel, 4, 2) widget = QWidget() widget.setLayout(layout) return widget
def getParameterWidget(self): """ Returns a widget with sliders / fields with which properties of this volume property can be adjusted. :rtype: QWidget """ self.brightnessSlider = QSlider(Qt.Horizontal) self.brightnessSlider.setMinimum(0) self.brightnessSlider.setMaximum(500) self.brightnessSlider.setValue(int(self.brightness)) self.brightnessSlider.valueChanged.connect(self.valueChanged) self.brightnessLabel = QLabel(str(self.brightness / 100.0)) self.windowSlider = QSlider(Qt.Horizontal) self.windowSlider.setMinimum(0) self.windowSlider.setMaximum(int(abs(self.maximum - self.minimum))) self.windowSlider.setValue(int(self.window)) self.windowSlider.valueChanged.connect(self.valueChanged) self.windowLabel = QLabel(str(self.window)) self.levelSlider = QSlider(Qt.Horizontal) self.levelSlider.setMinimum(int(self.minimum)) self.levelSlider.setMaximum(int(self.maximum)) self.levelSlider.setValue(int(self.level)) self.levelSlider.valueChanged.connect(self.valueChanged) self.levelLabel = QLabel(str(self.level)) self.lowerBoundSlider = QSlider(Qt.Horizontal) self.lowerBoundSlider.setMinimum(int(self.minimum)) self.lowerBoundSlider.setMaximum(int(self.maximum)) self.lowerBoundSlider.setValue(int(self.lowerBound)) self.lowerBoundSlider.valueChanged.connect(self.valueChanged) self.lowerBoundLabel = QLabel(str(self.lowerBound)) self.upperBoundSlider = QSlider(Qt.Horizontal) self.upperBoundSlider.setMinimum(int(self.minimum)) self.upperBoundSlider.setMaximum(int(self.maximum)) self.upperBoundSlider.setValue(int(self.upperBound)) self.upperBoundSlider.valueChanged.connect(self.valueChanged) self.upperBoundLabel = QLabel(str(self.upperBound)) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(QLabel("Window"), 0, 0) layout.addWidget(self.windowSlider, 0, 1) layout.addWidget(self.windowLabel, 0, 2) layout.addWidget(QLabel("Level"), 1, 0) layout.addWidget(self.levelSlider, 1, 1) layout.addWidget(self.levelLabel, 1, 2) layout.addWidget(QLabel("Brightness"), 2, 0) layout.addWidget(self.brightnessSlider, 2, 1) layout.addWidget(self.brightnessLabel, 2, 2) layout.addWidget(QLabel("Lower threshold"), 3, 0) layout.addWidget(self.lowerBoundSlider, 3, 1) layout.addWidget(self.lowerBoundLabel, 3, 2) layout.addWidget(QLabel("Upper threshold"), 4, 0) layout.addWidget(self.upperBoundSlider, 4, 1) layout.addWidget(self.upperBoundLabel, 4, 2) widget = QWidget() widget.setLayout(layout) return widget
def getParameterWidget(self): """ Returns a widget with sliders / fields with which properties of this volume property can be adjusted. :rtype: QWidget """ self.lowerBoundSlider = SliderFloatWidget() self.lowerBoundSlider.setName("Lower:") self.lowerBoundSlider.setRange([self.minimum, self.maximum]) self.lowerBoundSlider.setValue(self.lowerBound) self.lowerBoundSlider.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.lowerBoundSlider.valueChanged.connect(self.valueChanged) self.upperBoundSlider = SliderFloatWidget() self.upperBoundSlider.setName("Upper:") self.upperBoundSlider.setRange([self.minimum, self.maximum]) self.upperBoundSlider.setValue(self.upperBound) self.upperBoundSlider.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.upperBoundSlider.valueChanged.connect(self.valueChanged) layoutGroup = QGridLayout() layoutGroup.setAlignment(Qt.AlignTop) layoutGroup.setContentsMargins(5, 0, 0, 0) layoutGroup.setSpacing(0) layoutGroup.addWidget(self.lowerBoundSlider) layoutGroup.addWidget(self.upperBoundSlider) groupbox = QGroupBox("Thresholds:") groupbox.setLayout(layoutGroup) self.opacitySlider = SliderFloatWidget() self.opacitySlider.setName("Opacity:") self.opacitySlider.setRange([0.0, 1.0]) self.opacitySlider.setValue(self.opacity) self.opacitySlider.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.opacitySlider.valueChanged.connect(self.valueChanged) self.colorChooser = ColorChoiceWidget() self.colorChooser.setName("Color:") self.colorChooser.setColors(self.colors) self.colorChooser.setColor(self.color) self.colorChooser.setMinimumHeight(self.upperBoundSlider.sizeHint().height()) self.colorChooser.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.colorChooser.valueChanged.connect(self.valueChanged) otherLayoutGroup = QGridLayout() otherLayoutGroup.setAlignment(Qt.AlignTop) otherLayoutGroup.setContentsMargins(5, 0, 0, 0) otherLayoutGroup.setSpacing(0) otherLayoutGroup.addWidget(self.opacitySlider) # otherLayoutGroup.addWidget(self.colorChooser) # otherBox = QGroupBox("Color and opacity:") otherBox = QGroupBox() otherBox.setLayout(otherLayoutGroup) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) layout.setContentsMargins(0, 0, 0, 0) layout.setHorizontalSpacing(0) layout.addWidget(groupbox) layout.addWidget(otherBox) widget = QWidget() widget.setLayout(layout) try: from ColumnResizer import ColumnResizer self.columnResizer = ColumnResizer() self.columnResizer.addWidgetsFromLayout(self.lowerBoundSlider.layout(), 0) self.columnResizer.addWidgetsFromLayout(self.upperBoundSlider.layout(), 0) self.columnResizer.addWidgetsFromLayout(self.colorChooser.layout(), 0) self.columnResizer.addWidgetsFromLayout(self.opacitySlider.layout(), 0) self.otherColRes = ColumnResizer() self.otherColRes.addWidgetsFromLayout(self.lowerBoundSlider.layout(), 2) self.otherColRes.addWidgetsFromLayout(self.upperBoundSlider.layout(), 2) self.otherColRes.addWidgetsFromLayout(self.opacitySlider.layout(), 2) except Exception, e: print e
def setFile(self, fileName): """ Slot that reads properties of the dataset and displays them in a few widgets. """ if fileName is None: return self.fileName = fileName # Read info from dataset # TODO: read out the real world dimensions in inch or cm # TODO: scalar type (int, float, short, etc.) imageReader = DataReader() imageData = imageReader.GetImageData(fileName) directory, name = os.path.split(fileName) dimensions = imageData.GetDimensions() minimum, maximum = imageData.GetScalarRange() scalarType = imageData.GetScalarTypeAsString() bins = DataAnalyzer.histogramForData(imageData, 256) self.histogram = Histogram() self.histogram.bins = bins self.histogram.enabled = True self.histogramWidget = HistogramWidget() self.histogramWidget.setMinimumHeight(100) self.histogramWidget.setHistogram(self.histogram) self.histogramWidget.setAxeMode(bottom=HistogramWidget.AxeClear, left=HistogramWidget.AxeLog) Style.styleWidgetForTab(self.histogramWidget) nameText = name dimsText = "(" + str(dimensions[0]) + ", " + str(dimensions[1]) + ", " + str(dimensions[2]) + ")" voxsText = str(dimensions[0] * dimensions[1] * dimensions[2]) rangText = "[" + str(minimum) + " : " + str(maximum) + "]" typeText = scalarType layout = self.layout() if not layout: # Create a new layout layout = QGridLayout() layout.setAlignment(Qt.AlignTop) # Create string representations nameLabels = [] nameLabels.append(QLabel("File name:")) nameLabels.append(QLabel("Dimensions:")) nameLabels.append(QLabel("Voxels:")) nameLabels.append(QLabel("Range:")) nameLabels.append(QLabel("Data type:")) for label in nameLabels: label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) # Create 'dynamic' labels self.labelTitle = QLabel(nameText) self.labelDimensions = QLabel(dimsText) self.labelVoxels = QLabel(voxsText) self.labelRange = QLabel(rangText) self.labelType = QLabel(typeText) index = 0 for label in nameLabels: layout.addWidget(label, index, 0) index += 1 layout.addWidget(self.labelTitle, 0, 1) layout.addWidget(self.labelDimensions, 1, 1) layout.addWidget(self.labelVoxels, 2, 1) layout.addWidget(self.labelRange, 3, 1) layout.addWidget(self.labelType, 4, 1) layout.addWidget(self.histogramWidget, 5, 0, 1, 2) widget = QWidget() widget.setLayout(layout) Style.styleWidgetForTab(widget) self.scrollArea.setWidget(widget) scrollLayout = QGridLayout() scrollLayout.setSpacing(0) scrollLayout.setContentsMargins(0, 0, 0, 0) scrollLayout.addWidget(self.scrollArea) self.setLayout(scrollLayout) else: # Just update the text for the 'dynamic' labels self.labelTitle.setText(nameText) self.labelDimensions.setText(dimsText) self.labelVoxels.setText(voxsText) self.labelRange.setText(rangText) self.labelType.setText(typeText)
def setFile(self, fileName): """ Slot that reads properties of the dataset and displays them in a few widgets. """ if fileName is None: return # Read info from dataset # TODO: read out the real world dimensions in inch or cm # TODO: scalar type (int, float, short, etc.) imageReader = DataReader() imageData = imageReader.GetImageData(fileName) directory, name = os.path.split(fileName) dimensions = imageData.GetDimensions() minimum, maximum = imageData.GetScalarRange() bins = DataAnalyzer.histogramForData(imageData, 256) self.histogram = Histogram() self.histogram.bins = bins self.histogram.enabled = True self.histogramWidget = HistogramWidget() self.histogramWidget.setHistogram(self.histogram) self.histogramWidget.setAxeMode(bottom=HistogramWidget.AxeClear, left=HistogramWidget.AxeLog) Style.styleWidgetForTab(self.histogramWidget) nameText = name dimsText = "(" + str(dimensions[0]) + ", " + str(dimensions[1]) + ", " + str(dimensions[2]) + ")" voxsText = str(dimensions[0] * dimensions[1] * dimensions[2]) rangText = "[" + str(minimum) + " : " + str(maximum) + "]" layout = self.layout() if not layout: # Create a new layout layout = QGridLayout() layout.setAlignment(Qt.AlignTop) # Create string representations nameField = QLabel("File name:") dimsField = QLabel("Dimensions:") voxsField = QLabel("Voxels:") rangField = QLabel("Range:") nameField.setAlignment(Qt.AlignRight | Qt.AlignVCenter) dimsField.setAlignment(Qt.AlignRight | Qt.AlignVCenter) voxsField.setAlignment(Qt.AlignRight | Qt.AlignVCenter) rangField.setAlignment(Qt.AlignRight | Qt.AlignVCenter) # Create 'dynamic' labels self.labelTitle = QLabel(nameText) self.labelDimensions = QLabel(dimsText) self.labelVoxels = QLabel(voxsText) self.labelRange = QLabel(rangText) layout.addWidget(nameField, 0, 0) layout.addWidget(dimsField, 1, 0) layout.addWidget(voxsField, 2, 0) layout.addWidget(rangField, 3, 0) layout.addWidget(self.labelTitle, 0, 1) layout.addWidget(self.labelDimensions, 1, 1) layout.addWidget(self.labelVoxels, 2, 1) layout.addWidget(self.labelRange, 3, 1) layout.addWidget(self.histogramWidget, 4, 0, 1, 2) self.setLayout(layout) else: # Just update the text for the 'dynamic' labels self.labelTitle.setText(nameText) self.labelDimensions.setText(dimsText) self.labelVoxels.setText(voxsText) self.labelRange.setText(rangText)