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
Example #2
0
    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)
Example #5
0
    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)
Example #9
0
 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)
Example #10
0
    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
Example #12
0
	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)
Example #13
0
    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()
Example #14
0
    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(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)
Example #17
0
    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)
	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)
Example #19
0
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)
Example #21
0
    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)
Example #24
0
    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(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.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 __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)
Example #32
0
    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)
Example #33
0
    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)
Example #34
0
    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 __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 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)
Example #43
0
    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)
Example #45
0
    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)
Example #50
0
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
Example #51
0
    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()