예제 #1
0
 def _init_scenes_and_views(self):
     self.main_scene = GeneralScene(self, self.layer_stack)
     self.main_view = GeneralView(self.main_scene, self)
     self.setCentralWidget(self.main_view)
     self.histogram_scene = HistogramScene(self, self.layer_stack)
     self.histogram_dock_widget = Qt.QDockWidget('Histogram', self)
     self.histogram_view, self._histogram_frame = HistogramView.make_histogram_view_and_frame(
         self.histogram_scene, self.histogram_dock_widget)
     self.histogram_dock_widget.setWidget(self._histogram_frame)
     self.histogram_dock_widget.setAllowedAreas(Qt.Qt.BottomDockWidgetArea
                                                | Qt.Qt.TopDockWidgetArea)
     self.histogram_dock_widget.setFeatures(
         Qt.QDockWidget.DockWidgetClosable
         | Qt.QDockWidget.DockWidgetFloatable
         | Qt.QDockWidget.DockWidgetMovable
         | Qt.QDockWidget.DockWidgetVerticalTitleBar)
     self.addDockWidget(Qt.Qt.BottomDockWidgetArea,
                        self.histogram_dock_widget)
     self.layer_table_dock_widget = Qt.QDockWidget('Layer Stack', self)
     self.layer_table_model = LayerTableModel(self.layer_stack)
     # NB: Qt.QAbstractItemView, an ancestor of InvertingProxyModel, attempts to start a QTimer as it is destroyed.  Therefore,
     # it must be destroyed before the event dispatcher thread local object is destroyed - IE, not by Python's last-pass garbage
     # collector, which collects in no particular order, often collecting the dispatcher before any stray item models.  To prompt
     # pre-last-pass destruction, it is sufficient to make all Qt.QAbstractItemView progeny QObject-parented to a QObject that
     # is definitely destroyed before the last pass.  We are careful to ensure that RisWidget instances meet this criterion.
     self.layer_table_model_inverter = InvertingProxyModel(self)
     self.layer_table_model_inverter.setSourceModel(self.layer_table_model)
     self.layer_table_view = LayerTableView(self.layer_table_model)
     self.layer_table_view.setModel(self.layer_table_model_inverter)
     self.layer_table_model.setParent(self.layer_table_view)
     self.layer_table_selection_model = self.layer_table_view.selectionModel(
     )
     self.layer_stack.selection_model = self.layer_table_selection_model
     self.layer_table_dock_widget.setWidget(self.layer_table_view)
     self.layer_table_dock_widget.setAllowedAreas(Qt.Qt.AllDockWidgetAreas)
     self.layer_table_dock_widget.setFeatures(
         Qt.QDockWidget.DockWidgetClosable
         | Qt.QDockWidget.DockWidgetFloatable
         | Qt.QDockWidget.DockWidgetMovable)
     self.addDockWidget(Qt.Qt.TopDockWidgetArea,
                        self.layer_table_dock_widget)
     self.fps_display_dock_widget = Qt.QDockWidget('FPS', self)
     self.fps_display = FPSDisplay()
     self.main_scene.layer_stack_item.painted.connect(
         self.fps_display.notify)
     self.fps_display_dock_widget.setWidget(self.fps_display)
     self.fps_display_dock_widget.setAllowedAreas(Qt.Qt.AllDockWidgetAreas)
     self.fps_display_dock_widget.setFeatures(
         Qt.QDockWidget.DockWidgetClosable
         | Qt.QDockWidget.DockWidgetFloatable
         | Qt.QDockWidget.DockWidgetMovable)
     self.addDockWidget(Qt.Qt.RightDockWidgetArea,
                        self.fps_display_dock_widget)
     self.fps_display_dock_widget.hide()
예제 #2
0
 def _init_notefield(self):
     self.nf = NoteField(parent=self.rw.qt_object)
     self.nf_dock_w = Qt.QDockWidget('AnnotationNoteField')
     self.nf_dock_w.setWidget(self.nf)
     self.nf_dock_w.setAllowedAreas(Qt.Qt.BottomDockWidgetArea)
     self.nf_dock_w.setFeatures(Qt.QDockWidget.DockWidgetFloatable
                                | Qt.QDockWidget.DockWidgetMovable)
     self.rw.qt_object.addDockWidget(Qt.Qt.BottomDockWidgetArea,
                                     self.nf_dock_w)
예제 #3
0
 def _init_layer_stack_painter(self):
     self.layer_stack_painter_dock_widget = Qt.QDockWidget(
         'Layer Stack Painter', self)
     self.layer_stack_painter_dock_widget.setAllowedAreas(
         Qt.Qt.RightDockWidgetArea | Qt.Qt.LeftDockWidgetArea)
     self.layer_stack_painter_dock_widget.setFeatures(
         Qt.QDockWidget.DockWidgetClosable
         | Qt.QDockWidget.DockWidgetFloatable
         | Qt.QDockWidget.DockWidgetMovable)
     self.addDockWidget(Qt.Qt.RightDockWidgetArea,
                        self.layer_stack_painter_dock_widget)
     self.layer_stack_painter_dock_widget.hide()
     self.layer_stack_painter = None
     self.layer_stack_painter_dock_widget.toggleViewAction(
     ).toggled.connect(
         self._on_layer_stack_painter_dock_widget_visibility_toggled)
예제 #4
0
 def _init_flipbook(self):
     self.flipbook = fb = flipbook.Flipbook(self.layer_stack, self)
     self.flipbook_dock_widget = Qt.QDockWidget('Flipbook', self)
     self.flipbook_dock_widget.setWidget(fb)
     self.flipbook_dock_widget.setAllowedAreas(Qt.Qt.RightDockWidgetArea
                                               | Qt.Qt.LeftDockWidgetArea)
     self.flipbook_dock_widget.setFeatures(
         Qt.QDockWidget.DockWidgetClosable
         | Qt.QDockWidget.DockWidgetFloatable
         | Qt.QDockWidget.DockWidgetMovable)
     self.addDockWidget(Qt.Qt.RightDockWidgetArea,
                        self.flipbook_dock_widget)
     fb.pages_model.rowsInserted.connect(self._update_flipbook_visibility)
     fb.pages_model.rowsRemoved.connect(self._update_flipbook_visibility)
     self.flipbook_dock_widget.hide()
     # Make the flipbook deal with drop events
     self.dragEnterEvent = self.flipbook.pages_view.dragEnterEvent
     self.dragMoveEvent = self.flipbook.pages_view.dragMoveEvent
     self.dropEvent = self.flipbook.pages_view.dropEvent
예제 #5
0
    def _create_stack_window(self,
                             stack: Images,
                             title: str,
                             position=QtCore.Qt.TopDockWidgetArea,
                             floating=False) -> Qt.QDockWidget:
        dock = Qt.QDockWidget(title, self)

        # this puts the new stack window into the centre of the window
        self.setCentralWidget(dock)

        # add the dock widget into the main window
        self.addDockWidget(position, dock)

        # we can get the stack visualiser widget with dock_widget.widget
        dock.setWidget(StackVisualiserView(self, dock, stack))

        # proof of concept above
        assert isinstance(
            dock.widget(), StackVisualiserView
        ), "Widget inside dock_widget is not an StackVisualiserView!"

        dock.setFloating(floating)

        return dock
예제 #6
0
    def init_gui(self):

        self.comlist = serial.tools.list_ports.comports()
        self.s = [port.device for port in serial.tools.list_ports.comports()]
        self.setAttribute(Qt.Qt.WA_DeleteOnClose)
        self.view = pg.GraphicsWindow(title="Basic plotting")
        self.view.setBackground('k')
        self.p1 = self.view.addPlot(name="Plot1", title='')
        self.setCentralWidget(self.view)

        controls_dock = Qt.QDockWidget("Controls")
        controls = Qt.QWidget()

        grid = Qt.QGridLayout(controls)
        grid.addWidget(Qt.QLabel("Open file to plot graph"), 0, 0)
        grid.addWidget(Qt.QLabel("Clear Plot"), 1, 0)
        grid.addWidget(Qt.QLabel("Start Measure"), 2, 0)
        grid.addWidget(Qt.QLabel("Speed Scan"), 3, 0)
        grid.addWidget(Qt.QLabel("Com Port"), 4, 0)
        grid.addWidget(Qt.QLabel("Refresh Port"), 5, 0)
        grid.addWidget(Qt.QLabel("Start, nm"), 6, 0)
        grid.addWidget(Qt.QLabel("Stop, nm"), 7, 0)

        openButton = Qt.QPushButton("Open")
        grid.addWidget(openButton, 0, 1)
        openButton.clicked.connect(self.on_open)

        clearButton = Qt.QPushButton("Clear")
        grid.addWidget(clearButton, 1, 1)
        clearButton.clicked.connect(self.clear_plot)

        startButton = Qt.QPushButton("Start")
        grid.addWidget(startButton, 2, 1)
        startButton.clicked.connect(self.start_measure)

        combo = Qt.QComboBox(self)
        combo.addItems(["128", "32", "8"])
        combo.activated[str].connect(self.speed_scan)
        grid.addWidget(combo, 3, 1)

        self.combo1 = Qt.QComboBox(self)
        self.combo1.addItems(self.s)
        self.combo1.activated[str].connect(self.com_port)
        grid.addWidget(self.combo1, 4, 1)

        refreshButton = Qt.QPushButton("Refresh")
        grid.addWidget(refreshButton, 5, 1)
        refreshButton.clicked.connect(self.refresh_port)

        #        self.progress = Qt.QProgressBar(self)
        #        grid.addWidget(self.progress, 6, 1)

        self.spinBoxStart = Qt.QSpinBox()
        self.spinBoxStart.setRange(0, 1200)
        grid.addWidget(self.spinBoxStart, 6, 1)
        self.spinBoxStart.setValue(400)

        self.spinBoxEnd = Qt.QSpinBox()
        self.spinBoxEnd.setRange(0, 1200)
        grid.addWidget(self.spinBoxEnd, 7, 1)
        self.spinBoxEnd.setValue(800)

        grid.setRowStretch(8, 6)
        controls_dock.setWidget(controls)
        self.addDockWidget(Qt.Qt.LeftDockWidgetArea, controls_dock)

        self.start = False
        self.speed_nm = 128
예제 #7
0
    def _init_scenes_and_views(self):
        self.setCentralWidget(self.image_view)

        self.layer_table_model = layer_table.LayerTableModel(self.layer_stack)
        # NB: Qt.QAbstractItemView, an ancestor of InvertingProxyModel, attempts to start a QTimer as it is destroyed.  Therefore,
        # it must be destroyed before the event dispatcher thread local object is destroyed - IE, not by Python's last-pass garbage
        # collector, which collects in no particular order, often collecting the dispatcher before any stray item models.  To prompt
        # pre-last-pass destruction, it is sufficient to make all Qt.QAbstractItemView progeny QObject-parented to a QObject that
        # is definitely destroyed before the last pass.  We are careful to ensure that RisWidget instances meet this criterion.
        self.layer_table_model_inverter = layer_table.InvertingProxyModel(self)
        self.layer_table_model_inverter.setSourceModel(self.layer_table_model)
        self.layer_table_view = layer_table.LayerTableView(
            self.layer_table_model)
        self.layer_table_view.setModel(self.layer_table_model_inverter)
        # setting the selection model isn't part of the layer_stack constructor
        # because otherwise there would be a circular dependency
        self.layer_stack.set_selection_model(
            self.layer_table_view.selectionModel())
        self.layer_table_model.setParent(self.layer_table_view)
        self.layer_table_model.rowsInserted.connect(
            self._update_layer_stack_visibility)
        self.layer_table_model.rowsRemoved.connect(
            self._update_layer_stack_visibility)

        self.layer_table_dock_widget = Qt.QDockWidget('Layer Stack', self)
        self.layer_table_dock_widget.setWidget(self.layer_table_view)
        self.layer_table_dock_widget.setAllowedAreas(Qt.Qt.AllDockWidgetAreas)
        self.layer_table_dock_widget.setFeatures(
            Qt.QDockWidget.DockWidgetClosable
            | Qt.QDockWidget.DockWidgetVerticalTitleBar)
        self.addDockWidget(Qt.Qt.TopDockWidgetArea,
                           self.layer_table_dock_widget)
        self.layer_table_dock_widget.hide()

        self.histogram_scene = qgraphicsscenes.HistogramScene(
            self.layer_stack, self)
        self.histogram_dock_widget = Qt.QDockWidget('Histogram', self)
        self.histogram_view, self._histogram_frame = histogram_view.HistogramView.make_histogram_view_and_frame(
            self.histogram_scene, self.histogram_dock_widget)
        self.histogram_dock_widget.setWidget(self._histogram_frame)
        self.histogram_dock_widget.setAllowedAreas(Qt.Qt.BottomDockWidgetArea
                                                   | Qt.Qt.TopDockWidgetArea)
        self.histogram_dock_widget.setFeatures(
            Qt.QDockWidget.DockWidgetClosable
            | Qt.QDockWidget.DockWidgetFloatable
            | Qt.QDockWidget.DockWidgetMovable
            | Qt.QDockWidget.DockWidgetVerticalTitleBar)
        self.addDockWidget(Qt.Qt.BottomDockWidgetArea,
                           self.histogram_dock_widget)

        self.fps_display_dock_widget = Qt.QDockWidget('FPS', self)
        self.fps_display = fps_display.FPSDisplay(
            self.image_scene.layer_stack_item.new_image_painted)
        self.fps_display_dock_widget.setWidget(self.fps_display)
        self.fps_display_dock_widget.setAllowedAreas(Qt.Qt.AllDockWidgetAreas)
        self.fps_display_dock_widget.setFeatures(
            Qt.QDockWidget.DockWidgetClosable
            | Qt.QDockWidget.DockWidgetFloatable
            | Qt.QDockWidget.DockWidgetMovable)
        self.addDockWidget(Qt.Qt.RightDockWidgetArea,
                           self.fps_display_dock_widget)
        self.fps_display_dock_widget.hide()
예제 #8
0
    def init_gui(self):
        
        self.comlist = serial.tools.list_ports.comports()
        self.list_ports = [port.device for port in serial.tools.list_ports.comports()]
        self.setAttribute(Qt.Qt.WA_DeleteOnClose)
        self.view = pg.GraphicsWindow(title = "Basic plotting")
        self.plot = self.view.addPlot(name = "Plot", title = '')
        self.setCentralWidget(self.view)
        self.view.setBackground('w')
        self.vLine = pg.InfiniteLine(angle = 90, movable = False, label = 'x={value:0.2f}', labelOpts={'position':0.94, 'color': (255,69,0)})
        self.hLine = pg.InfiniteLine(angle = 0, movable = False, label = 'y={value:0.2f}', labelOpts={'position':0.94,  'color': (255, 0, 0)})
        self.plot.addItem(self.vLine, ignoreBounds = True)
        self.plot.addItem(self.hLine, ignoreBounds = True)

        controls_dock = Qt.QDockWidget("Controls")
        controls = Qt.QWidget()
        
        grid = Qt.QGridLayout(controls)
        grid.addWidget(Qt.QLabel("Start Measure"), 0, 0)
        grid.addWidget(Qt.QLabel("Speed Scan"), 1, 0)
        grid.addWidget(Qt.QLabel("Mode Scan"), 2, 0)
        grid.addWidget(Qt.QLabel("Start, nm"), 3, 0)
        grid.addWidget(Qt.QLabel("Stop, nm"), 4, 0)
        grid.addWidget(Qt.QLabel("Stop Measure"), 5, 0)
        grid.addWidget(Qt.QLabel("Open file to plot graph"), 6, 0)
        grid.addWidget(Qt.QLabel("Clear Plot"), 7, 0)
        grid.addWidget(Qt.QLabel("Com Port"), 8, 0)
        grid.addWidget(Qt.QLabel("Refresh Port"), 9, 0)
        grid.addWidget(Qt.QLabel("Save PNG"), 10, 0)
#         grid.addWidget(Qt.QLabel("Save TXT"), 11, 0)
        
        self.startButton = Qt.QPushButton("Start")
        grid.addWidget(self.startButton, 0, 1)
        self.startButton.clicked.connect(self.start_measure)
        
        combo = Qt.QComboBox(self)
        combo.addItems(["128", "32", "8"])
        combo.activated[str].connect(self.speed_scan)
        grid.addWidget(combo, 1, 1)
        
        
        combo1 = Qt.QComboBox(self)
        combo1.addItems(["Dual beam mode", "Single beam mode"])
        combo1.activated[str].connect(self.mode_scan)
        grid.addWidget(combo1, 2, 1)
        
        
        self.spinBoxStart = Qt.QDoubleSpinBox()
        self.spinBoxStart.setRange(0 , 1200)
        grid.addWidget(self.spinBoxStart, 3, 1)
        self.spinBoxStart.setValue(400)
        
        
        self.spinBoxEnd = Qt.QDoubleSpinBox()
        self.spinBoxEnd.setRange(0 , 1200)
        grid.addWidget(self.spinBoxEnd, 4, 1)
        self.spinBoxEnd.setValue(800)
        
        
        self.stopButton = Qt.QPushButton("Stop")
        grid.addWidget(self.stopButton, 5, 1)
        self.stopButton.clicked.connect(self.stop)
        self.stopButton.setEnabled(False)
        
        
        openButton = Qt.QPushButton("Open")
        grid.addWidget(openButton, 6, 1)
        openButton.clicked.connect(self.on_open)
        
        
        clearButton = Qt.QPushButton("Clear")
        grid.addWidget(clearButton, 7, 1)
        clearButton.clicked.connect(self.clear_plot)
        
        
        self.combo1 = Qt.QComboBox(self)
        self.combo1.addItems(self.list_ports)
        self.combo1.activated[str].connect(self.com_port)
        self.com = self.list_ports
        if len(self.com) != 0:
            self.com = self.com[0]
        grid.addWidget(self.combo1, 8, 1)


        refreshButton = Qt.QPushButton("Refresh")
        grid.addWidget(refreshButton, 9, 1)
        refreshButton.clicked.connect(self.refresh_port)
    
        
        self.pngButton = Qt.QPushButton("PNG")
        grid.addWidget(self.pngButton, 10, 1)
        self.pngButton.clicked.connect(self.png)
        self.pngButton.setEnabled(False)
        
#         self.txtButton = Qt.QPushButton("TXT")
#         grid.addWidget(self.txtButton, 11, 1)
#         self.txtButton.clicked.connect(self.txt)
#         self.txtButton.setEnabled(False)
        
        self.pbar = Qt.QProgressBar(self)
        grid.addWidget(self.pbar, 12, 0, 2 , 2)
        
        self.label = Qt.QLabel()
        self.label.setStyleSheet('background-color: rgb(255, 255, 0);')  
        grid.addWidget(self.label, 14, 0, 2 , 2)
        grid.setRowStretch(14, 2)
        grid.setRowStretch(16, 1)
        
        self.statusbar = self.statusBar()
        
        controls_dock.setWidget(controls)
        self.addDockWidget(Qt.Qt.LeftDockWidgetArea, controls_dock)