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, width, height, grid): super(GameOfLifeWidget, self).__init__() self.setWindowTitle('Game Of Life') layout = QGridLayout() layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) main_layout = QVBoxLayout() self.buttons = [] self.grid = grid self.width = width self.height = height self.timer = QTimer() self.timer.setInterval(INTERVAL) self.timer.timeout.connect(self._handle_timeout) self.start_button = QPushButton("Start") self.start_button.clicked.connect(self._handle_start) self.clear_button = QPushButton("Clear") self.clear_button.clicked.connect(self._handle_clear) main_layout.addLayout(layout) main_layout.addWidget(self.start_button) main_layout.addWidget(self.clear_button) self.setLayout(main_layout) for y_pos in range(height): row = [] self.buttons.append(row) for x_pos in range(width): button = QPushButton() row.append(button) button.setMaximumWidth(20) button.setMaximumHeight(20) button.clicked.connect(self._handle_click) layout.addWidget(button, y_pos, x_pos) self._update_gui()
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 initUI(self): self.dateEdit = QDateEdit() layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.dateEdit, 0, 0) layout.addItem(QSpacerItem(20, 20, QSizePolicy.Minimum, QSizePolicy.Expanding)) self.setLayout(layout)
def realize(self): """This function is part of initialization where it handles ModuleAgent creation and wiring and subclass view placement. """ # Create and wire the Agent into the Boxfish tree self.agent = self.agent_type(self.parent_frame.agent, self.parent_frame.agent.datatree) self.agent.module_scene = self.scene_type(self.agent_type, self.display_name) self.parent_frame.agent.registerChild(self.agent) # Create and place the module-specific view elements self.view = self.createView() self.centralWidget = QWidget() layout = QGridLayout() if isinstance(self.parent(), BFDockWidget): layout.addWidget(DragDockLabel(self.parent()), 0, 0, 1, 2) # TODO: Replace magic number with not-magic constant layout.addWidget(self.view, 100, 0, 1, 2) # Add view at bottom layout.setRowStretch(100, 5) # view has most row stretch left, top, right, bottom = layout.getContentsMargins() layout.setContentsMargins(0, 0, 0, 0) self.centralWidget.setLayout(layout) self.setCentralWidget(self.centralWidget) # Tab Dialog stuff self.enable_tab_dialog = True self.dialog = list()
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 initUI(self): # container = QWidget(self) # container.resize(200, 100); # container.setStyleSheet("background-color:black;") font_size = QLabel('Font Size') font_size.fillColor = QColor(30, 30, 30, 120) font_size.penColor = QColor("#333333") grid = QGridLayout() grid.setContentsMargins(50, 10, 10, 10) grid.addWidget(font_size, 0, 0) self.setLayout(grid) # palette = QPalette(self.palette()) # palette.setColor(self.backgroundRole(), Qt.black) # palette.setColor(palette.Background, Qt.transparent) # self.setPalette(palette) # def paintEvent(self, event): # painter = QPainter() # painter.begin(self) # # painter.setRenderHint(QPainter.Antialiasing) # painter.fillRect(event.rect(), QBrush(QColor(255, 255, 255, 127))) # painter.drawLine(self.width() / 8, self.height() / 8, 7 * self.width() / 8, 7 * self.height() / 8) # painter.drawLine(self.width() / 8, 7 * self.height() / 8, 7 * self.width() / 8, self.height() / 8) # # painter.setPen(QPen(Qt.NoPen))
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 __init__(self, spiderName, resumable=False, parent=None): super(SpiderToolButton, self).__init__(parent) self._drag_start = None button_play = QToolButton() button_play.setIcon(QIcon("play.png")) self.triggered.connect( button_play.triggered ) # clicking the outer button run the play functionality button_play.setIconSize(QSize(32, 32)) button_resume = QToolButton() button_resume.setEnabled(resumable) button_resume.setIcon(QIcon("resume.png")) button_resume.setIconSize(QSize(32, 32)) button_pause = QToolButton() button_pause.setIcon(QIcon("pause.png")) button_pause.setIconSize(QSize(32, 32)) self.label_spidername = QLabel(spiderName) self.label_spidername.setStyleSheet(self.stylesheet_label_spidername) layout = QGridLayout() layout.addWidget(self.label_spidername, 0, 0) layout.addWidget(button_pause, 1, 1) layout.addWidget(button_resume, 1, 2) layout.addWidget(button_play, 1, 3) layout.setContentsMargins(10, 8, 10, 8) 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): 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, 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 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): super(TransferFunctionWidget, self).__init__() self.nodes = [] self.lines = [] self.histogram = Histogram() self.histogram.enabled = False # Create a histogram widget for the background of the transfer function editor self.histogramWidget = HistogramWidget() self.histogramWidget.setHistogram(self.histogram) self.histogramWidget.setAxeMode(bottom=HistogramWidget.AxeClear, left=HistogramWidget.AxeLog) self.histogramWidget.update() self.histogramWidget._histogramItem.delegate = self Style.styleWidgetForTab(self.histogramWidget) # Invisible item that catches mouse events on top of the histogram self.transferfunctionItem = TransferFunctionItem() self.transferfunctionItem.setZValue(250) self.transferfunctionItem.delegate = self self.histogramWidget.addItem(self.transferfunctionItem) # Create a widget for editing the selected node of the transfer function self.nodeItemWidget = NodeItemWidget() self.nodeItemWidget.setEnabled(False) self.nodeItemWidget.nodeUpdated.connect(self.updateNode) self.nodeItemWidget.removePoint.connect(self.removePoint) layout = QGridLayout() layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.histogramWidget, 0, 0) layout.addWidget(self.nodeItemWidget, 1, 0) self.setLayout(layout)
def __init__(self): super(RenderWidget, self).__init__() # Default volume renderer self.renderer = vtkRenderer() self.renderer.SetBackground2(0.4, 0.4, 0.4) self.renderer.SetBackground(0.1, 0.1, 0.1) self.renderer.SetGradientBackground(True) self.renderer.SetLayer(0) # Overlay renderer which is synced with the default renderer self.rendererOverlay = vtkRenderer() self.rendererOverlay.SetLayer(1) self.rendererOverlay.SetInteractive(0) self.renderer.GetActiveCamera().AddObserver("ModifiedEvent", self._syncCameras) self.rwi = QVTKRenderWindowInteractor(parent=self) self.rwi.SetInteractorStyle(vtkInteractorStyleTrackballCamera()) self.rwi.GetRenderWindow().AddRenderer(self.renderer) self.rwi.GetRenderWindow().AddRenderer(self.rendererOverlay) self.rwi.GetRenderWindow().SetNumberOfLayers(2) self.rwi.SetDesiredUpdateRate(0) self.imagePlaneWidgets = [vtkImagePlaneWidget() for i in range(3)] for index in range(3): self.imagePlaneWidgets[index].DisplayTextOn() self.imagePlaneWidgets[index].SetInteractor(self.rwi) # Disable the margin for free rotation self.imagePlaneWidgets[index].SetMarginSizeX(0.0) self.imagePlaneWidgets[index].SetMarginSizeY(0.0) self.mapper = vtkOpenGLGPUVolumeRayCastMapper() self.mapper.SetAutoAdjustSampleDistances(1) self.volume = None self.imageData = None self.VolumeVisualization = None self.shouldResetCamera = False self.gridItems = [] self.orientationGridItems = [] self.clippingBox = ClippingBox() self.clippingBox.setWidget(self) # Keep track of the base and user transforms self.baseTransform = vtkTransform() self.userTransform = vtkTransform() self.setMinimumWidth(340) self.setMinimumHeight(340) layout = QGridLayout(self) layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.rwi, 0, 0) self.setLayout(layout)
class Board(QWidget): def __init__(self, theme, parent=None): super(Board, self).__init__(parent) self.theme = theme self.num = 8 self.lay = QGridLayout(self) self.lay.setContentsMargins(15, 10, 15, 10) self.lay.setHorizontalSpacing(0) self.lay.setVerticalSpacing(0) self.setLayout(self.lay) self.diamonds = [] self.selected = None self.generateDiamonds(self.num) def generateDiamonds(self, num): for y in range(0, num): for x in range(0, num): diamond = Diamond(random.choice(Colors), self.theme, self) diamond.clicked.connect(self.diamondClicked) self.lay.addWidget(diamond, x, y) self.diamonds.append(diamond) def paintEvent(self, event): painter = QPainter() painter.begin(self) self.theme.render(painter, "kdiamond-border") painter.end() @Slot(Diamond) def diamondClicked(self, diamond): if self.selected is diamond: self.selected = None diamond.select(False) diamond.update() else: if self.selected is not None: if self.selected.color is diamond.color: self.selected.hide() diamond.hide() self.selected = None return self.selected.select(False) self.selected.update() diamond.select(True) diamond.update() self.selected = diamond
def initUI(self): # container = QWidget(self) # container.resize(200, 100); # container.setStyleSheet("background-color:black;") font_size = QLabel('Font Size') font_size.fillColor = QColor(30, 30, 30, 120) font_size.penColor = QColor("#333333") grid = QGridLayout() grid.setContentsMargins(50, 10, 10, 10) grid.addWidget(font_size, 0, 0) self.setLayout(grid)
def initUI(self): # hbox = QHBoxLayout() hbox = QGridLayout() self.lineEdit = QLineEdit() self.browseButton = QPushButton("Browse") hbox.addWidget(self.lineEdit, 0, 0, ) hbox.addWidget(self.browseButton, 0, 1) hbox.setContentsMargins(0, 0, 0, 0) self.browseButton.clicked.connect(self.grabFileName) self.setLayout(hbox)
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): super(SliderWidget, self).__init__() self.label = QLabel() self.slider = QSlider(Qt.Horizontal) self.spinbox = QSpinBox() self.slider.valueChanged.connect(self.changedValue) self.spinbox.valueChanged.connect(self.changedValue) layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setVerticalSpacing(0) layout.addWidget(self.label, 0, 0) layout.addWidget(self.slider, 0, 1) layout.addWidget(self.spinbox, 0, 2) self.setLayout(layout)
def __init__(self): super(SliceViewerWidget, self).__init__() self.color = [1, 1, 1] self.renderer = vtkRenderer() self.renderer.SetBackground(0.0, 0.0, 0.0) self.renderer.SetLayer(0) # Overlay renderer which is synced with the default renderer self.rendererOverlay = vtkRenderer() self.rendererOverlay.SetLayer(1) self.rendererOverlay.SetInteractive(0) self.renderer.GetActiveCamera().AddObserver("ModifiedEvent", self._syncCameras) self.rwi = QVTKRenderWindowInteractor(parent=self) self.rwi.SetInteractorStyle(vtkInteractorStyleUser()) self.rwi.GetRenderWindow().AddRenderer(self.renderer) self.rwi.GetRenderWindow().AddRenderer(self.rendererOverlay) self.rwi.GetRenderWindow().SetNumberOfLayers(2) # Set camera to parallel camera = self.renderer.GetActiveCamera() camera.SetParallelProjection(1) # Add new observers for mouse wheel self.AddObserver(self.rwi, "CharEvent", self.charTyped) self.AddObserver(self.rwi, "MouseWheelBackwardEvent", self.mouseWheelChanged) self.AddObserver(self.rwi, "MouseWheelForwardEvent", self.mouseWheelChanged) self.AddObserver(self.rwi, "MouseMoveEvent", self.mouseMovedEvent, 1) self.picker = vtkCellPicker() self.picker.SetTolerance(1e-6) self.locator = [] self.setStyleSheet("background-color: #333") layout = QGridLayout() layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.rwi) self.setLayout(layout)
def __init__(self): super(SliceViewerWidget, self).__init__() self.color = [1, 1, 1] self.renderer = vtkRenderer() self.renderer.SetBackground2(0.4, 0.4, 0.4) self.renderer.SetBackground(0.1, 0.1, 0.1) self.renderer.SetGradientBackground(True) self.renderer.SetLayer(0) # Overlay renderer which is synced with the default renderer self.rendererOverlay = vtkRenderer() self.rendererOverlay.SetLayer(1) self.rendererOverlay.SetInteractive(0) self.renderer.GetActiveCamera().AddObserver("ModifiedEvent", self._syncCameras) self.rwi = QVTKRenderWindowInteractor(parent=self) self.rwi.SetInteractorStyle(vtkInteractorStyleUser()) self.rwi.GetRenderWindow().AddRenderer(self.renderer) self.rwi.GetRenderWindow().AddRenderer(self.rendererOverlay) self.rwi.GetRenderWindow().SetNumberOfLayers(2) # Set camera to parallel camera = self.renderer.GetActiveCamera() camera.SetParallelProjection(1) # Add new observers for mouse wheel self.AddObserver(self.rwi, "CharEvent", self.charTyped) self.AddObserver(self.rwi, "MouseWheelBackwardEvent", self.mouseWheelChanged) self.AddObserver(self.rwi, "MouseWheelForwardEvent", self.mouseWheelChanged) self.AddObserver(self.rwi, "MouseMoveEvent", self.mouseMovedEvent, 1) self.picker = vtkCellPicker() self.picker.SetTolerance(1e-6) # Known state of mouse (maybe can ask the event as well...) self.leftButtonPressed = False self.locator = [] layout = QGridLayout() layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.rwi) self.setLayout(layout)
def __init__(self): super(ColorWidget, self).__init__() self.label = QLabel() self.color = [1.0, 1.0, 1.0] buttonLayout = QHBoxLayout() buttonLayout.setContentsMargins(8, 0, 0, 0) self.buttonWidget = QWidget() self.buttonWidget.setLayout(buttonLayout) layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) layout.addWidget(self.label, 0, 0) layout.addWidget(self.buttonWidget, 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.histogramWidget = TransferFunctionWidget() self.histogramWidget.transferFunction = self.transferFunction self.histogramWidget.valueChanged.connect(self.valueChanged) if self.imageData: self.histogramWidget.setImageData(self.imageData) layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.histogramWidget, 0, 0, 1, 3) widget = QWidget() widget.setLayout(layout) return widget
def __init__(self): super(SliceCompareViewerWidget, self).__init__() self.renderer = vtkRenderer() self.renderer.SetBackground(0.0, 0.0, 0.0) self.renderer.SetLayer(0) # Overlay renderer which is synced with the default renderer self.rendererOverlay = vtkRenderer() self.rendererOverlay.SetLayer(1) self.rendererOverlay.SetInteractive(0) self.renderer.GetActiveCamera().AddObserver("ModifiedEvent", self._syncCameras) self.rwi = QVTKRenderWindowInteractor(parent=self) self.rwi.SetInteractorStyle(vtkInteractorStyleUser()) self.rwi.GetRenderWindow().AddRenderer(self.renderer) self.rwi.GetRenderWindow().AddRenderer(self.rendererOverlay) self.rwi.GetRenderWindow().SetNumberOfLayers(2) # Set camera to parallel camera = self.renderer.GetActiveCamera() camera.SetParallelProjection(1) # Add new observers for mouse wheel self.AddObserver(self.rwi, "CharEvent", self.charTyped) self.AddObserver(self.rwi, "MouseWheelBackwardEvent", self.mouseWheelChanged) self.AddObserver(self.rwi, "MouseWheelForwardEvent", self.mouseWheelChanged) self.AddObserver(self.rwi, "MouseMoveEvent", self.mouseMovedEvent, 1) self.picker = vtkCellPicker() self.picker.SetTolerance(1e-6) self.locator = [] self.setStyleSheet("background-color: #333") layout = QGridLayout() layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.rwi) 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 __init__(self): super(RenderWidget, self).__init__() self.renderer = vtkRenderer() self.renderer.SetBackground2(0.4, 0.4, 0.4) self.renderer.SetBackground(0.1, 0.1, 0.1) self.renderer.SetGradientBackground(True) self.rwi = QVTKRenderWindowInteractor(parent=self) self.rwi.SetInteractorStyle(vtkInteractorStyleTrackballCamera()) self.rwi.GetRenderWindow().AddRenderer(self.renderer) # -964.384 cloth # -656.56 skin # 20.144 Muscle # 137.168 Vascular stuff # 233.84 (Brittle) Bones # 394.112 Bones # What is the value for steel/implants? self.sections = [ -3000.0, -964.384, -656.56, 20.144, 137.168, 233.84, 394.112, 6000.0 ] self.sectionsOpacity = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] # sectionColors should be specified for each boundary # Just like opacity should be tweaked. A section can have any slope / configuration self.sectionColors = [ (1.0, 1.0, 1.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (1.0, 0.7, 0.6), (1.0, 0.2, 0.2), (1.0, 0.9, 0.7), (0.9, 1.0, 0.9) ] self.renderType = None self.imageData = None layout = QGridLayout(self) layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.rwi, 0, 0) self.setLayout(layout)
def __init__(self): super(SliderFloatWidget, self).__init__() self.label = QLabel() self.slider = QSlider(Qt.Horizontal) self.spinbox = QDoubleSpinBox() self.slider.valueChanged.connect(self.changedValueFromSlider) self.spinbox.valueChanged.connect(self.changedValueFromSpinBox) # Keep track of whether one of the values was changed # By setting the value of the slider and the spinbox, valueChanged # events are fired. These events have to be ignored self._changed = False layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setVerticalSpacing(0) layout.addWidget(self.label, 0, 0) layout.addWidget(self.slider, 0, 1) layout.addWidget(self.spinbox, 0, 2) 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 __init__(self): super(LandmarkLocationWidget, self).__init__() self._active = False self._font = QFont() self._font.setPointSize(10) self.indexLabel = QLabel() self.indexLabel.setMaximumWidth(10) self.indexLabel.setMinimumWidth(10) self.doneButton = QPushButton("Done") self.doneButton.setMaximumWidth(50) self.doneButton.setFont(self._font) self.doneButton.clicked.connect(self.doneButtonClicked) self.deleteButton = QPushButton("X") self.deleteButton.setMaximumWidth(15) self.deleteButton.setMinimumWidth(15) self.deleteButton.setMaximumHeight(15) self.deleteButton.setMinimumHeight(15) self.deleteButton.setFont(self._font) self.deleteButton.setVisible(False) self.deleteButton.clicked.connect(self.deleteButtonClicked) self.fixedButton = SpecialButton() self.fixedButton.setFont(self._font) self.movingButton = SpecialButton() self.movingButton.setFont(self._font) layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setVerticalSpacing(0) layout.addWidget(self.deleteButton, 0, 0) layout.addWidget(self.indexLabel, 0, 1) layout.addWidget(self.fixedButton, 0, 2) layout.addWidget(self.movingButton, 0, 3) layout.addWidget(self.doneButton, 0, 4) self.setLayout(layout) self._updateState()
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, spiderName, resumable=False,parent=None): super(SpiderToolButton, self).__init__(parent) self._drag_start = None button_play = QToolButton() button_play.setIcon(QIcon("play.png")) self.triggered.connect(button_play.triggered) # clicking the outer button run the play functionality button_play.setIconSize(QSize(32, 32)) button_resume = QToolButton() button_resume.setEnabled(resumable) button_resume.setIcon(QIcon("resume.png")) button_resume.setIconSize(QSize(32, 32)) button_pause = QToolButton() button_pause.setIcon(QIcon("pause.png")) button_pause.setIconSize(QSize(32, 32)) self.label_spidername = QLabel(spiderName) self.label_spidername.setStyleSheet(self.stylesheet_label_spidername) layout = QGridLayout() layout.addWidget(self.label_spidername, 0, 0) layout.addWidget(button_pause, 1,1) layout.addWidget(button_resume, 1, 2) layout.addWidget(button_play, 1, 3) layout.setContentsMargins(10, 8, 10, 8) self.setLayout(layout)
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 customview_Init(self, pane): # Get the pane if pane == None: return False custPane = lx.object.CustomPane(pane) if custPane.test() == False: return False # Get the parent QWidget parent = custPane.GetParent() parentWidget = lx.getQWidget(parent) # Check that it suceeds if parentWidget != None: layout = QGridLayout() layout.setContentsMargins(1,1,1,1) self.form = projectmanager.ProjectManager() layout.addWidget(self.form) parentWidget.setLayout(layout) return True return False
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, widgets): super(CompareWidget, self).__init__() self.setStyleSheet("background-color: #333") fixedDataTitleWidget = self.createLabel("Fixed data", "#f80") movingDataTitleWidget = self.createLabel("Moving data", "#4bf") # Labels for underneath the compare widget fixedLabel = self.createLabel("Fixed", "#f80") fixedLabel.setAlignment(Qt.AlignRight) centerLabel = self.createLabel("+", "#fff") movingLabel = self.createLabel("Moving", "#4bf") movingLabel.setAlignment(Qt.AlignLeft) horLayout = QHBoxLayout() horLayout.setContentsMargins(0, 0, 0, 0) horLayout.addStretch(1) horLayout.addWidget(fixedLabel) horLayout.addWidget(centerLabel) horLayout.addWidget(movingLabel) horLayout.addStretch(1) combinedTextWidget = QWidget() combinedTextWidget.setLayout(horLayout) layout = QGridLayout() layout.setSpacing(15) layout.setContentsMargins(15, 15, 15, 15) for i in range(len(widgets)): widget = widgets[i] layout.addWidget(widget, 0, i) layout.addWidget(fixedDataTitleWidget, 1, 0) layout.addWidget(combinedTextWidget, 1, 1) layout.addWidget(movingDataTitleWidget, 1, 2) 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 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 __init__(self, parent=None): super(MainWindow, self).__init__(parent) # Global form layout form = QFormLayout() form.setContentsMargins(0, 0, 0, 0) # Header box containing label and icon hbox = QHBoxLayout() hbox.setSpacing(0) hbox.setContentsMargins(0, 0, 0, 0) header = QFrame() header.setFrameStyle(QFrame.Panel | QFrame.Sunken) header.setStyleSheet("QWidget { background-color: white; color: black;}") header_text = QLabel("<b>" + _("Clacks Infrastructure") + "</b><br>" + "v%s" % VERSION) header_text.setStyleSheet("QWidget { background-color: white; color: black; border: 0; margin: 0; padding: 3;}") header_text.setAlignment(Qt.AlignLeft | Qt.AlignTop) hbox.addWidget(header_text, 1) header_image = QLabel() header_image.setStyleSheet("QWidget { background-color: white; color: black; border: 0; margin: 0; padding: 0;}") header_image.setAlignment(Qt.AlignRight | Qt.AlignTop) bg = QPixmap(resource_filename("clacks.client", "data/secure-card.png")) header_image.setPixmap(bg) hbox.addWidget(header_image) header.setLayout(hbox) form.addRow(header) # Dialog headline headline = QLabel(_("Please enter the credentials of an administrative user to join this client.")) headline.setWordWrap(True) headline.setStyleSheet("QLabel { padding: 3; }") form.addRow(headline) # Separator line = QFrame() line.setFrameShape(QFrame.HLine) line.setFrameShadow(QFrame.Sunken) form.addRow(line) # Input fields for user and password ll = QGridLayout() userLabel = QLabel("User name") self.userEdit = QLineEdit(self) passwordLabel = QLabel("Password") self.passwordEdit = QLineEdit(self) self.passwordEdit.setEchoMode(QLineEdit.Password) # Add focus key handler for line edits kpe = FocusNextOnReturn(self) self.userEdit.installEventFilter(kpe) aor = AcceptOnReturn(self) self.passwordEdit.installEventFilter(aor) # Place widgets in layout ll.addWidget(userLabel, 0, 0) ll.addWidget(self.userEdit, 0, 1) ll.addWidget(passwordLabel, 1, 0) ll.addWidget(self.passwordEdit, 1, 1) ll.setContentsMargins(3, 3, 3, 3) form.addRow(ll) # Separator line2 = QFrame() line2.setFrameShape(QFrame.HLine) line2.setFrameShadow(QFrame.Sunken) form.addRow(line2) # OK button buttonBox = QDialogButtonBox(QDialogButtonBox.Ok) form.addRow(buttonBox) buttonBox.accepted.connect(self.accept) # Finalize the window self.setLayout(form) self.setMinimumSize(400, 150) self.setWindowTitle('Join client') self.setGeometry((QApplication.desktop().width() - self.sizeHint().width()) / 2, (QApplication.desktop().height() - self.sizeHint().height()) / 2, self.sizeHint().width(), self.sizeHint().height()) # Disable close self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.CustomizeWindowHint | Qt.Window | Qt.WindowTitleHint)
def createElements(self): """ Creates the widgets and docks of which the main window is composed. """ self.mainWindow = QMainWindow() projectController = ProjectController.Instance() self.transformTool = None # Render widgets self.fixedDataWidget = RenderWidget() self.movingDataWidget = RenderWidget() self.multiDataWidget = MultiRenderWidget() self.fixedRenderController = RenderController(self.fixedDataWidget, "fixed") self.movingRenderController = RenderController(self.movingDataWidget, "moving") self.multiRenderController = MultiRenderController( self.multiDataWidget) # Give references of the render controllers to the project controller projectController.fixedRenderController = self.fixedRenderController projectController.movingRenderController = self.movingRenderController projectController.multiRenderController = self.multiRenderController # Render properties widgets sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(1) self.fixedPropWidget = RenderPropWidget(self.fixedRenderController, parent=self) self.fixedPropWidget.setSizePolicy(sizePolicy) self.fixedPropWidget.setFileChangedSignal( projectController.fixedFileChanged) self.fixedPropWidget.setLoadDataSlot(self.loadFixedDataSetFile) self.movingPropWidget = RenderPropWidget(self.movingRenderController, parent=self) self.movingPropWidget.setSizePolicy(sizePolicy) self.movingPropWidget.setFileChangedSignal( projectController.movingFileChanged) self.movingPropWidget.setLoadDataSlot(self.loadMovingDataSetFile) self.multiPropWidget = MultiRenderPropWidget( self.multiRenderController, parent=self) self.multiPropWidget.setSizePolicy(sizePolicy) self.verticalSplitter = QSplitter() self.verticalSplitter.setOrientation(Qt.Vertical) # Create the layouts fixedDataTitleWidget = TitleWidget("Fixed volume") multiDataTitleWidget = TitleWidget("Fixed + Moving") movingDataTitleWidget = TitleWidget("Moving volume") fixedLayout = QGridLayout() fixedLayout.setSpacing(0) fixedLayout.setContentsMargins(0, 0, 0, 0) fixedLayout.addWidget(fixedDataTitleWidget) fixedLayout.addWidget(self.fixedDataWidget) fixedWidget = QWidget() fixedWidget.setLayout(fixedLayout) multiLayout = QGridLayout() multiLayout.setSpacing(0) multiLayout.setContentsMargins(0, 0, 0, 0) multiLayout.addWidget(multiDataTitleWidget) multiLayout.addWidget(self.multiDataWidget) multiWidget = QWidget() multiWidget.setLayout(multiLayout) movingLayout = QGridLayout() movingLayout.setSpacing(0) movingLayout.setContentsMargins(0, 0, 0, 0) movingLayout.addWidget(movingDataTitleWidget) movingLayout.addWidget(self.movingDataWidget) movingWidget = QWidget() movingWidget.setLayout(movingLayout) horizontalSplitter = QSplitter() horizontalSplitter.setOrientation(Qt.Horizontal) horizontalSplitter.addWidget(fixedWidget) horizontalSplitter.addWidget(multiWidget) horizontalSplitter.addWidget(movingWidget) propsLayout = QHBoxLayout() propsLayout.setSpacing(1) propsLayout.setContentsMargins(0, 0, 0, 0) propsLayout.addWidget(self.fixedPropWidget) propsLayout.addWidget(self.multiPropWidget) propsLayout.addWidget(self.movingPropWidget) propsWidget = QWidget() propsWidget.setMinimumHeight(245) propsWidget.setMaximumHeight(350) propsWidget.setLayout(propsLayout) self.verticalSplitter.addWidget(horizontalSplitter) self.verticalSplitter.addWidget(propsWidget) self.verticalSplitter.setStretchFactor(0, 2) self.verticalSplitter.setStretchFactor(1, 1) self.setCentralWidget(self.verticalSplitter)
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 __init__(self): super(MultiRenderWidget, self).__init__() # Default volume renderer self.renderer = vtkRenderer() self.renderer.SetBackground2(0.4, 0.4, 0.4) self.renderer.SetBackground(0.1, 0.1, 0.1) self.renderer.SetGradientBackground(True) self.renderer.SetInteractive(1) self.renderer.SetLayer(0) # Overlay renderer which is synced with the default renderer self.rendererOverlay = vtkRenderer() self.rendererOverlay.SetLayer(1) self.rendererOverlay.SetInteractive(0) self.renderer.GetActiveCamera().AddObserver("ModifiedEvent", self._syncCameras) self.rwi = QVTKRenderWindowInteractor(parent=self) self.rwi.SetInteractorStyle(vtkInteractorStyleTrackballCamera()) self.rwi.GetRenderWindow().AddRenderer(self.renderer) self.rwi.GetRenderWindow().AddRenderer(self.rendererOverlay) self.rwi.GetRenderWindow().SetNumberOfLayers(2) self.rwi.SetDesiredUpdateRate(0) self._imagePlaneWidgets = [vtkImagePlaneWidget() for i in range(3)] for index in range(3): self._imagePlaneWidgets[index].DisplayTextOn() self._imagePlaneWidgets[index].SetInteractor(self.rwi) self.mapper = vtkOpenGLGPUMultiVolumeRayCastMapper() self.mapper.SetBlendModeToComposite() self.volume = vtkVolume() self.volume.SetMapper(self.mapper) self.renderer.AddViewProp(self.volume) self.fixedGridItems = [] self.movingGridItems = [] self.orientationGridItems = [] # Create two empty datasets self.fixedImageData = CreateEmptyImageData() self.movingImageData = CreateEmptyImageData() self.fixedVolumeProperty = vtkVolumeProperty() self.movingVolumeProperty = vtkVolumeProperty() color, opacityFunction = CreateEmptyFunctions() self.fixedVolumeProperty.SetColor(color) self.fixedVolumeProperty.SetScalarOpacity(opacityFunction) self.movingVolumeProperty.SetColor(color) self.movingVolumeProperty.SetScalarOpacity(opacityFunction) self.visualization = None # MultiVolumeVisualization self.clippingBox = ClippingBox() self.clippingBox.setWidget(self) self.mapper.SetInputData(0, self.fixedImageData) self.mapper.SetInputData(1, self.movingImageData) self._transformations = TransformationList() self._transformations.transformationChanged.connect(self.updateTransformation) self._shouldResetCamera = False self.setMinimumWidth(340) self.setMinimumHeight(340) layout = QGridLayout(self) layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.rwi, 0, 0) self.setLayout(layout)
class MShape(QWidget, MAnimate): def __init__(self): QWidget.__init__(self) self.__x = 0 self.__y = 0 self.__width = 0 self.__height = 0 self.__opacity = 1.0 self.__clip = None self.__max_width = 0 self.__max_height = 0 self.__min_width = 0 self.__min_height = 0 self.__max_opacity = 1.0 self.__min_opacity = 0.0 self.__margin_left = 0 self.__margin_top = 0 self.__padding_x = 0 self.__padding_y = 0 # Defining the layout which will hold the child shapes of the widget self.__layout = QGridLayout() self.__layout.setVerticalSpacing(0) self.__layout.setHorizontalSpacing(0) self.__layout.setContentsMargins(QMargins(0, 0, 0, 0)) self.__children = [] def add_layout_item(self, shape, x, y): self.__layout.addWidget(shape, x, y) self.__children.append(shape) self.update() def remove_layout_item(self, shape): self.__layout.removeWidget(shape) self.__children.remove(shape) shape.deleteLater() self.update() @property def x(self): return self.__x @x.setter def x(self, x): self.__x = x @property def y(self): return self.__y @y.setter def y(self, y): self.__y = y @property def layout(self): return self.__layout @property def width(self): return self.__width @width.setter def width(self, width): self.__width = width if self.width < self.min_width: self.__width = self.min_width elif self.width > self.max_width: self.__width = self.max_width @property def min_width(self): return self.__min_width @min_width.setter def min_width(self, width): self.__min_width = width @property def max_width(self): return self.__max_width @max_width.setter def max_width(self, width): self.__max_width = width @property def height(self): return self.__height @height.setter def height(self, height): self.__height = height if self.height < self.min_height: self.__height = self.min_height elif self.height > self.max_height: self.__height = self.max_height @property def min_height(self): return self.__min_height @min_height.setter def min_height(self, height): self.__min_height = height @property def max_height(self): return self.__max_height @max_height.setter def max_height(self, height): self.__max_height = height @property def opacity(self): return self.__opacity @opacity.setter def opacity(self, opacity): self.__opacity = opacity if self.opacity < self.min_opacity: self.opacity = self.min_opacity @property def min_opacity(self): return self.__min_opacity @min_opacity.setter def min_opacity(self, opacity): self.__min_opacity = opacity @property def max_opacity(self): return self.__max_opacity @max_opacity.setter def max_opacity(self, opacity): self.__max_opacity = opacity @property def margin_left(self): return self.__margin_left @margin_left.setter def margin_left(self, margin): self.__margin_left = margin @property def margin_top(self): return self.__margin_top @margin_top.setter def margin_top(self, margin): self.__margin_top = margin @property def clip(self): return self.__clip @clip.setter def clip(self, value): self.__clip = value
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
class TransformationParameterWidget(QWidget): """ TransformationParameterWidget """ 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 setTransformationTool(self, transformationTool): self.transformationTool = transformationTool self.cleanUpTransformWidget() self.transformationWidget = self.transformationTool.getParameterWidget() self.mainLayout.addWidget(self.transformationWidget) self.showControls(True) @Slot() def cancelButtonClicked(self): """ Cancels the transform and hides the apply / cancel buttons """ self.showControls(False) self.cleanUpTransformWidget() self.transformationTool.cancelTransform() self.transformationTool.cleanUp() self.transformationTool = None @Slot() def applyButtonClicked(self): """ Applies the transform and hides the apply / cancel buttons """ self.showControls(False) self.cleanUpTransformWidget() self.transformationTool.applyTransform() self.transformationTool.cleanUp() self.transformationTool = None def showControls(self, show): self.widget.setVisible(show) self.applyButton.setVisible(show) self.cancelButton.setVisible(show) def cleanUpTransformWidget(self): item = self.mainLayout.takeAt(0) if item: item.widget().deleteLater()