コード例 #1
0
    def build_ui(self):
        self.remove_files_button = QtGui.QPushButton('Remove selected files')
        self.remove_files_button.clicked.connect(self.rm_files)

        self.viewer_frame = QtGui.QFrame()
        self.viewer_layout = QtGui.QGridLayout()
        self.viewer_frame.setLayout(self.viewer_layout)

        self.wf_frame = QtGui.QFrame()
        self.wf_layout = QtGui.QGridLayout()
        self.wf_frame.setLayout(self.wf_layout)
        self.wf_selector = QtGui.QComboBox()
        lm = ListModel(self._wf_uris.keys())
        self.wf_selector.setModel(lm)
        self.wf_selector.currentIndexChanged.connect(
            partial(self._set_wf_by_idx))
        self.run_wf_button = QtGui.QPushButton(self._run_button_text)
        self.run_wf_button.clicked.connect(self.toggle_run_wf)
        self.vis_toggle = QtGui.QCheckBox('Realtime visualization')
        self.wf_control = pt.ParameterTree()
        self.wf_control.setHeaderLabels(['Operation', 'Settings'])
        self.wf_layout.addWidget(self.wf_selector, 0, 0, 1, 2)
        self.wf_layout.addWidget(self.run_wf_button, 1, 0, 1, 1)
        self.wf_layout.addWidget(self.vis_toggle, 1, 1, 1, 1)
        self.wf_layout.addWidget(self.wf_control, 2, 0, 1, 2)
        #self.wf_control.itemClicked.connect(self._display_wf_item)

        self.batch_control = QtGui.QWidget()
        self.batch_list = QtGui.QListWidget()
        self.batch_layout = QtGui.QGridLayout()
        self.batch_control.setLayout(self.batch_layout)
        self.batch_layout.addWidget(self.batch_list, 0, 0, 1, 1)
        self.batch_layout.addWidget(self.remove_files_button, 1, 0, 1, 1)
        self.batch_list.setSelectionMode(
            QtGui.QAbstractItemView.ExtendedSelection)
コード例 #2
0
    def __init__(self,
                 reserved: Iterable[str] = None,
                 parent=None,
                 window_flags=Qt.WindowFlags()):
        super(MetadataDialog, self).__init__(parent, window_flags)

        self.reserved = set(reserved or [])

        self.parameter_tree = pt.ParameterTree(showHeader=False)
        self.parameter_tree.setParameters(self.parameter, showTop=False)

        calibrate_button = QPushButton("&Acquire")

        self.buttons = QDialogButtonBox(Qt.Horizontal)
        # Add calibration button that accepts the dialog (closes with 1 status)
        self.buttons.addButton(calibrate_button, QDialogButtonBox.AcceptRole)
        # Add a cancel button that will reject the dialog (closes with 0 status)
        self.buttons.addButton(QDialogButtonBox.Cancel)

        self.buttons.rejected.connect(self.reject)
        self.buttons.accepted.connect(self.accept)

        outer_layout = QVBoxLayout()
        outer_layout.addWidget(self.parameter_tree)
        outer_layout.addWidget(self.buttons)
        outer_layout.setSpacing(0)
        outer_layout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(outer_layout)
コード例 #3
0
 def __init__(self, parent=None):
     QtGui.QSplitter.__init__(self, QtCore.Qt.Horizontal)
     self.ctrlPanel = QtGui.QSplitter(QtCore.Qt.Vertical)
     self.addWidget(self.ctrlPanel)
     self.fieldList = QtGui.QListWidget()
     self.fieldList.setSelectionMode(self.fieldList.ExtendedSelection)
     self.ptree = ptree.ParameterTree(showHeader=False)
     self.filter = DataFilterParameter()
     self.colorMap = ColorMapParameter()
     self.params = ptree.Parameter.create(name='params', type='group', children=[self.filter, self.colorMap])
     self.ptree.setParameters(self.params, showTop=False)
     
     self.plot = PlotWidget()
     self.ctrlPanel.addWidget(self.fieldList)
     self.ctrlPanel.addWidget(self.ptree)
     self.addWidget(self.plot)
     
     bg = pg.mkColor(pg.getConfigOption('background'))
     bg.setAlpha(150)
     self.filterText = pg.TextItem(border=pg.getConfigOption('foreground'), color=bg)
     self.filterText.setPos(60,20)
     self.filterText.setParentItem(self.plot.plotItem)
     
     self.data = None
     self.mouseOverField = None
     self.scatterPlot = None
     self.style = dict(pen=None, symbol='o')
     
     self.fieldList.itemSelectionChanged.connect(self.fieldSelectionChanged)
     self.filter.sigFilterChanged.connect(self.filterChanged)
     self.colorMap.sigColorMapChanged.connect(self.updatePlot)
コード例 #4
0
ファイル: SubWidgets.py プロジェクト: mark-dawn/CaImAnGUI
    def __init__(self, parent=None):
        super().__init__(parent=parent)

        self.textbox = TextBoxHandler(parent=self)
        self.cm_params = pt.ParameterTree(parent=self)

        self.addTab(self.textbox, "Log")
        self.addTab(self.cm_params, "Parameters")
コード例 #5
0
ファイル: ui.py プロジェクト: lbluque/Xi-cam
    def setupUi(self):
        """Set up the UI for tomography plugin"""

        self.toolbar = Toolbar()
        self.centerwidget = QtGui.QTabWidget()
        self.centerwidget.setDocumentMode(True)
        self.centerwidget.setTabsClosable(True)
        self.bottomwidget = viewers.RunConsole()
        self.functionwidget = QUiLoader().load('xicam/gui/tomographyleft.ui')
        self.functionwidget.functionsList.setAlignment(QtCore.Qt.AlignBottom)

        self.functionwidget.addFunctionButton.setToolTip('Add function to pipeline')
        self.functionwidget.clearButton.setToolTip('Clear pipeline')
        self.functionwidget.fileButton.setToolTip('Save/Load pipeline')
        self.functionwidget.moveDownButton.setToolTip('Move selected function down')
        self.functionwidget.moveUpButton.setToolTip('Move selected function up')

        self.addfunctionmenu = QtGui.QMenu()
        self.functionwidget.addFunctionButton.setMenu(self.addfunctionmenu)
        self.functionwidget.addFunctionButton.setPopupMode(QtGui.QToolButton.ToolButtonPopupMode.InstantPopup)
        self.functionwidget.addFunctionButton.setArrowType(QtCore.Qt.NoArrow)

        filefuncmenu = QtGui.QMenu()
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("xicam/gui/icons_55.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.openaction = QtGui.QAction(icon, 'Open', filefuncmenu)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("xicam/gui/icons_59.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.saveaction = QtGui.QAction(icon, 'Save', filefuncmenu)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("xicam/gui/icons_56.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.refreshaction = QtGui.QAction(icon, 'Reset', filefuncmenu)
        filefuncmenu.addActions([self.openaction, self.saveaction, self.refreshaction])

        self.functionwidget.fileButton.setMenu(filefuncmenu)
        self.functionwidget.fileButton.setPopupMode(QtGui.QToolButton.ToolButtonPopupMode.InstantPopup)
        self.functionwidget.fileButton.setArrowType(QtCore.Qt.NoArrow)

        leftwidget = QtGui.QSplitter(QtCore.Qt.Vertical)

        paramtree = pt.ParameterTree()
        self.param_form = QtGui.QStackedWidget()
        self.param_form.addWidget(paramtree)
        self.property_table = pg.TableWidget()
        self.property_table.verticalHeader().hide()
        self.property_table.horizontalHeader().setStretchLastSection(True)
        self.property_table.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding)
        leftwidget.addWidget(self.param_form)
        leftwidget.addWidget(self.functionwidget)

        icon_functions = QtGui.QIcon(QtGui.QPixmap("xicam/gui/icons_49.png"))
        icon_properties = QtGui.QIcon(QtGui.QPixmap("xicam/gui/icons_61.png")) #metadata icon
        self.leftmodes = [(leftwidget, icon_functions),(self.property_table,icon_properties)]
コード例 #6
0
def test_opts():
    paramSpec = [
        dict(name='bool', type='bool', readonly=True),
        dict(name='color', type='color', readonly=True),
    ]

    param = pt.Parameter.create(name='params', type='group', children=paramSpec)
    tree = pt.ParameterTree()
    tree.setParameters(param)

    assert _getWidget(param.param('bool')).isEnabled() is False
    assert _getWidget(param.param('bool')).isEnabled() is False
コード例 #7
0
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("Configuration")

        self.config = config.global_settings
        self.pt = pgp.ParameterTree()

        self.setLayout(QtWidgets.QVBoxLayout())
        self.layout().addWidget(self.pt)

        self.createForm()
        self.setMinimumHeight(400)
        self.setMinimumWidth(600)
コード例 #8
0
 def __init__(self):
     pg.QtGui.QWidget.__init__(self)
     self.layout = pg.QtGui.QGridLayout()
     self.setLayout(self.layout)
     self.v_splitter = pg.QtGui.QSplitter()
     self.v_splitter.setOrientation(pg.QtCore.Qt.Vertical)
     self.distance_plot = DistancePlot()
     self.ptree = ptree.ParameterTree(showHeader=False)
     self.ptree.setParameters(self.distance_plot.params)
     self.layout.addWidget(self.v_splitter)
     self.v_splitter.addWidget(self.ptree)
     self.v_splitter.addWidget(self.distance_plot.grid)
     self.v_splitter.setSizes([1, 5000])   
コード例 #9
0
ファイル: suite.py プロジェクト: ZLLentz/typhos
    def __init__(
        self,
        parent: Optional[QtWidgets.QWidget] = None,
        *,
        pin: bool = False,
        content_layout: Optional[QtWidgets.QLayout] = None,
        default_display_type: DisplayTypes = DisplayTypes.detailed_screen,
        scroll_option: ScrollOptions = ScrollOptions.auto,
    ):
        super().__init__(parent=parent)

        self._update_title()

        self._tree = parametertree.ParameterTree(parent=self, showHeader=False)
        self._tree.setAlternatingRowColors(False)
        self._save_action = ptypes.ActionParameter(name='Save Suite')
        self._tree.addParameters(self._save_action)
        self._save_action.sigActivated.connect(self.save)

        self._bar = pcdsutils.qt.QPopBar(title='Suite',
                                         parent=self,
                                         widget=self._tree,
                                         pin=pin)

        self._tree.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding,
                                 QtWidgets.QSizePolicy.MinimumExpanding)
        self._tree.setMinimumSize(250, 150)

        self._content_frame = QtWidgets.QFrame(self)
        self._content_frame.setObjectName("content")
        self._content_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)

        # Content frame layout: configurable
        # Defaults to [content] [content] [content] ... in one line
        if content_layout is None:
            content_layout = QtWidgets.QHBoxLayout()
        self._content_frame.setLayout(content_layout)

        # Horizontal box layout: [PopBar] [Content Frame]
        layout = QtWidgets.QHBoxLayout()
        self.setLayout(layout)
        layout.setSpacing(1)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(self._bar)
        layout.addWidget(self._content_frame)

        self.embedded_dock = None
        self.default_display_type = default_display_type
        self.scroll_option = scroll_option
コード例 #10
0
    def add_param_tree(self):
        self.ptree = ptree.ParameterTree(showHeader=False)
        self.filter = DataFilterParameter()
        params = ptree.Parameter.create(name='params',
                                        type='group',
                                        children=[self.filter])
        self.ptree.setParameters(params, showTop=False)

        self.filter_layout.addWidget(self.ptree)

        self.filterText = TextItem(border=getConfigOption('foreground'))
        self.filterText.setPos(60, 20)
        self.filterText.setParentItem(self.plot.plotItem)
        self.filter.sigFilterChanged.connect(self.filterChanged)
        self.filter.setFields([('butterFilter', {'units': 'Hz'})])
コード例 #11
0
ファイル: hdftreewidget.py プロジェクト: whigg/h5browse
 def __init__(self, parent=None):
     super(DatasetDialog, self).__init__(parent)
     self.params = ptree.Parameter.create(name='datasetParameters',
                                          title='Dataset parameters',
                                          type='group',
                                          children=[{'name': 'name',
                                                     'type': 'str',
                                                     'value': 'dataset'},
                                                    {'name': 'dtype',
                                                     'title': 'datatype',
                                                     'type': 'str',
                                                     'value': 'float'},
                                                    {'name': 'shape',
                                                     'type': 'str',
                                                     'value': '(0),'},
                                                    {'name': 'maxshape',
                                                     'type': 'str',
                                                     'value': '(None,)'},
                                                    {'name': 'chunks',
                                                     'type': 'str',
                                                     'value': 'True'}])
     layout = QtGui.QVBoxLayout()
     paramTree = ptree.ParameterTree(showHeader=False)
     paramTree.setParameters(self.params)
     self.tabWidget = QtGui.QTabWidget()
     self.tabWidget.addTab(paramTree, 'Structure')
     attrTree = ptree.ParameterTree(showHeader=False)
     self.attrs = XtensibleParam(name='attrs', title='Attributes')
     attrTree.setParameters(self.attrs)
     self.tabWidget.addTab(attrTree, 'Attributes')
     layout.addWidget(self.tabWidget)
     buttonBox = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel, QtCore.Qt.Horizontal)
     buttonBox.accepted.connect(self.accept)
     buttonBox.rejected.connect(self.reject)
     layout.addWidget(buttonBox)
     self.setLayout(layout)
コード例 #12
0
def test_types():
    paramSpec = [
        dict(name='float', type='float'),
        dict(name='int', type='int'),
        dict(name='str', type='str'),
        dict(name='list', type='list', values=['x','y','z']),
        dict(name='dict', type='list', values={'x':1, 'y':3, 'z':7}),
        dict(name='bool', type='bool'),
        dict(name='color', type='color'),
    ]
    
    param = pt.Parameter.create(name='params', type='group', children=paramSpec)
    tree = pt.ParameterTree()
    tree.setParameters(param)

    all_objs = {
        'int0': 0, 'int':7, 'float': -0.35, 'bigfloat': 1e129, 'npfloat': np.float(5), 
        'npint': np.int(5),'npinf': np.inf, 'npnan': np.nan, 'bool': True, 
        'complex': 5+3j, 'str': 'xxx', 'unicode': asUnicode('µ'), 
        'list': [1,2,3], 'dict': {'1': 2}, 'color': pg.mkColor('k'), 
        'brush': pg.mkBrush('k'), 'pen': pg.mkPen('k'), 'none': None
    }
    if hasattr(QtCore, 'QString'):
        all_objs['qstring'] = QtCore.QString('xxxµ')

    # float
    types = ['int0', 'int', 'float', 'bigfloat', 'npfloat', 'npint', 'npinf', 'npnan', 'bool']
    check_param_types(param.child('float'), float, float, 0.0, all_objs, types)

    # int
    types = ['int0', 'int', 'float', 'bigfloat', 'npfloat', 'npint', 'bool']
    inttyps = int if sys.version[0] >= '3' else (int, long) 
    check_param_types(param.child('int'), inttyps, int, 0, all_objs, types)
    
    # str  (should be able to make a string out of any type)
    types = all_objs.keys()
    strtyp = str if sys.version[0] >= '3' else unicode
    check_param_types(param.child('str'), strtyp, asUnicode, '', all_objs, types)
    
    # bool  (should be able to make a boolean out of any type?)
    types = all_objs.keys()
    check_param_types(param.child('bool'), bool, bool, False, all_objs, types)

    # color
    types = ['color', 'int0', 'int', 'float', 'npfloat', 'npint', 'list']
    init = QtGui.QColor(128, 128, 128, 255)
    check_param_types(param.child('color'), QtGui.QColor, pg.mkColor, init, all_objs, types)
コード例 #13
0
def test_limits_enforcement():
    p = pt.Parameter.create(name='params', type='group', children=[
        dict(name='float', type='float', limits=[0, 1]),
        dict(name='int', type='int', bounds=[0, 1]),
        dict(name='list', type='list', values=['x', 'y']),
        dict(name='dict', type='list', values={'x': 1, 'y': 2}),
    ])
    t = pt.ParameterTree()
    t.setParameters(p)
    for k, vin, vout in [('float', -1, 0),
                         ('float',  2, 1),
                         ('int',   -1, 0),
                         ('int',    2, 1),
                         ('list',   'w', 'x'),
                         ('dict',   'w', 1)]:
        p[k] = vin
        assert p[k] == vout
コード例 #14
0
ファイル: hdftreewidget.py プロジェクト: whigg/h5browse
 def __init__(self, parent=None):
     super(GroupDialog, self).__init__(parent)
     self.params = ptree.Parameter.create(name='groupParameters',
                                          title='Group attributes',
                                          type='group',
                                          children=[{'name': 'name', 'title': 'Name', 'type': 'str',
                                                     'value': 'group'},
                                                    XtensibleParam(name='attrs', title='Attributes')])
     
     layout = QtGui.QVBoxLayout()
     paramTree = ptree.ParameterTree(showHeader=False)
     paramTree.setParameters(self.params)
     layout.addWidget(paramTree)
     buttonBox = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel, QtCore.Qt.Horizontal)
     buttonBox.accepted.connect(self.accept)
     buttonBox.rejected.connect(self.reject)
     layout.addWidget(buttonBox)
     self.setLayout(layout)
コード例 #15
0
 def __init__(self):
     pg.QtGui.QWidget.__init__(self)
     self.layout = pg.QtGui.QGridLayout()
     self.setLayout(self.layout)
     self.h_splitter = pg.QtGui.QSplitter()
     self.h_splitter.setOrientation(pg.QtCore.Qt.Horizontal)
     self.layout.addWidget(self.h_splitter, 0, 0)
     self.control_panel_splitter = pg.QtGui.QSplitter()
     self.control_panel_splitter.setOrientation(pg.QtCore.Qt.Vertical)
     self.h_splitter.addWidget(self.control_panel_splitter)
     self.update_button = pg.QtGui.QPushButton("Update Results")
     self.control_panel_splitter.addWidget(self.update_button)
     self.ptree = ptree.ParameterTree(showHeader=False)
     self.control_panel_splitter.addWidget(self.ptree)
     self.matrix_widget = MatrixWidget()
     self.h_splitter.addWidget(self.matrix_widget)
     self.tabs = Tabs()
     self.h_splitter.addWidget(self.tabs)
     self.h_splitter.setSizes([300, 600, 400])
コード例 #16
0
ファイル: dirreader.py プロジェクト: whigg/h5browse
 def __init__(self, parent=None):
     super(DirReader, self).__init__(parent=parent)
     self.settings = QtCore.QSettings('dataviz', 'dirreader')
     self.baseDirLabel = QtGui.QLabel('Base directory')
     self.baseDirEdit = QtGui.QLineEdit('.')
     self.baseDirButton = QtGui.QPushButton('Open')
     self.baseDirButton.clicked.connect(self.selectBaseDir)
     self.baseDirWidget = QtGui.QWidget()
     layout = QtGui.QHBoxLayout()
     self.baseDirWidget.setLayout(layout)
     layout.addWidget(self.baseDirLabel)
     layout.addWidget(self.baseDirEdit)
     layout.addWidget(self.baseDirButton)
     self.pathTree = ptree.ParameterTree(showHeader=False)
     self.pathRules = PathParams(name='Path rules')
     self.pathTree.setParameters(self.pathRules, showTop=True)
     self.setLayout(QtGui.QVBoxLayout())
     self.layout().addWidget(self.baseDirWidget)
     self.layout().addWidget(self.pathTree)
コード例 #17
0
def test_data_race():
    # Ensure widgets don't override user setting of param values whether
    # they connect the signal before or after it's added to a tree
    p = pt.Parameter.create(name='int', type='int', value=0)
    t = pt.ParameterTree()

    def override():
        p.setValue(1)

    p.sigValueChanged.connect(override)
    t.setParameters(p)
    pi = next(iter(p.items))
    assert pi.param is p
    pi.widget.setValue(2)
    assert p.value() == pi.widget.value() == 1
    p.sigValueChanged.disconnect(override)
    p.sigValueChanged.connect(override)
    pi.widget.setValue(2)
    assert p.value() == pi.widget.value() == 1
コード例 #18
0
def test_limits_enforcement_after_limits_changed():
    p = pt.Parameter.create(name='params',
                            type='group',
                            children=[
                                dict(name='float', type='float', limits=[0,
                                                                         1]),
                                dict(name='int', type='int', bounds=[-2, 2]),
                                dict(name='list',
                                     type='list',
                                     limits=['w', 'x', 'y']),
                                dict(name='dict',
                                     type='list',
                                     limits={
                                         'w': -2,
                                         'x': 1,
                                         'y': 2
                                     }),
                            ])
    t = pt.ParameterTree()
    t.setParameters(p)
    for k, vin, limits, vout in [('float', 0.5, [1, 5], 1),
                                 ('float', 2.5, [-5., -1], -1),
                                 ('int', 0, [3, 5], 3),
                                 ('int', 4, [-53, -5], -5),
                                 ('list', 'w', ['x', 'y'], 'x'),
                                 ('dict', ('w', -2), {
                                     'x': 1,
                                     'y': 2
                                 }, 1)]:

        if k == 'dict':
            p[k] = vin[0]
            assert p[k] == vin[1]
        else:
            p[k] = vin
            assert p[k] == vin
        p.child(k).setLimits(limits)
        assert p[k] == vout
コード例 #19
0
    def __init__(self, parent=None):
        QtGui.QSplitter.__init__(self, QtCore.Qt.Horizontal)
        self.ctrlPanel = QtGui.QSplitter(QtCore.Qt.Vertical)
        self.addWidget(self.ctrlPanel)
        self.fieldList = QtGui.QListWidget()
        self.fieldList.setSelectionMode(self.fieldList.ExtendedSelection)
        self.ptree = ptree.ParameterTree(showHeader=False)
        self.filter = DataFilterParameter()
        self.colorMap = ColorMapParameter()
        self.params = ptree.Parameter.create(
            name='params', type='group', children=[self.filter, self.colorMap])
        self.ptree.setParameters(self.params, showTop=False)

        self.plot = PlotWidget()
        self.ctrlPanel.addWidget(self.fieldList)
        self.ctrlPanel.addWidget(self.ptree)
        self.addWidget(self.plot)

        self.data = None
        self.style = dict(pen=None, symbol='o')

        self.fieldList.itemSelectionChanged.connect(self.fieldSelectionChanged)
        self.filter.sigFilterChanged.connect(self.filterChanged)
        self.colorMap.sigColorMapChanged.connect(self.updatePlot)
コード例 #20
0
    def __init__(self, app, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.app = app
        self.pcm_params = {'vmin': 0, 'vmax': 20}

        splitter = QSplitter()

        # DRAWING
        drawing_area_widget = QWidget(splitter)  # container widget
        drawing_area_layout = QVBoxLayout(
            drawing_area_widget)  # vertical layout
        # graphics area
        graphics_layout = pg.GraphicsLayoutWidget(drawing_area_widget)
        drawing_area_layout.addWidget(graphics_layout)
        self.viewbox = graphics_layout.addViewBox(lockAspect=True,
                                                  invertY=False,
                                                  enableMenu=False)
        self.tec_map_img = image_items.TecMapImageItem(config.theta_grid,
                                                       config.radius_grid)
        self.viewbox.addItem(self.tec_map_img)
        self.draw_img = image_items.DrawingImage('r', self.tec_map_img)
        self.viewbox.addItem(self.draw_img)
        self.hover_img = image_items.HoverImage(np.zeros((1000, 1000)))
        self.viewbox.addItem(self.hover_img)
        # Buttons
        button_area_widget = QWidget(drawing_area_widget)
        drawing_area_layout.addWidget(button_area_widget)
        button_area_layout = QHBoxLayout(button_area_widget)
        self._add_button("Clean", button_area_layout, self.map_clean)
        self._add_button("Save", button_area_layout, self.app.map_save)
        self._add_button("Next", button_area_layout, self.app.map_next)

        # cross section plot
        self.cross_section_plot = graphics_layout.addPlot()
        self.cross_section_plot.setMaximumWidth(300)
        self.cross_section_plot.setLimits(minXRange=10,
                                          maxXRange=40,
                                          yMin=30,
                                          yMax=90,
                                          xMin=0)
        self.cross_section_line = self.cross_section_plot.plot()
        self.cross_section_mlat = pg.InfiniteLine(angle=0)
        self.cross_section_plot.addItem(self.cross_section_mlat)
        self.proxy = pg.SignalProxy(self.hover_img.scene().sigMouseMoved,
                                    rateLimit=60,
                                    slot=self.mouseMoved)

        # status bar
        self.status_bar = QStatusBar()
        self.setStatusBar(self.status_bar)
        self.status_bar.showMessage(self.app.map_indicator)

        # PARAMETERS
        settings_area_widget = QWidget(splitter)
        settings_area_layout = QVBoxLayout(settings_area_widget)
        self.param_object = parametertree.Parameter.create(
            name='params', type='group', children=param_descriptor)
        self.param_object.sigTreeStateChanged.connect(self.parameter_changed)
        param_tree = parametertree.ParameterTree(parent=settings_area_widget,
                                                 showHeader=False)
        param_tree.addParameters(self.param_object)
        settings_area_layout.addWidget(param_tree)

        # TOP LEVEL
        splitter.addWidget(drawing_area_widget)
        splitter.addWidget(settings_area_widget)
        splitter.setStretchFactor(0, 1)
        self.setCentralWidget(splitter)

        self.setWindowTitle("TEC Label Creator")
        self.setGeometry(100, 100, 1200, 600)
        self.show()
コード例 #21
0
    def __init__(self, boc, expt_id, cell_id):
        self.boc = boc
        self.data_set = boc.get_ophys_experiment_data(
            ophys_experiment_id=expt_id)
        self.lsn_tmp = self.data_set.get_stimulus_template(
            'locally_sparse_noise')

        # setup cell selector
        cells = self.data_set.get_cell_specimen_ids()
        self.cell_selector = CellSelector()

        roi_img = (self.data_set.get_roi_mask_array() *
                   np.array(cells)[:, None, None]).max(axis=0)
        max_img = self.data_set.get_max_projection()
        self.cell_selector.set_images(max_img, roi_img)

        # setup spike detector
        self.spike_detector = SpikeDetector()

        # setup averager
        self.averager = TriggeredAverager()

        # make stimulus frame locations easier to look up
        self.lsn_id = None

        QtGui.QWidget.__init__(self)
        self.hs = pg.QtGui.QSplitter()
        self.hs.setOrientation(pg.QtCore.Qt.Horizontal)

        self.vs1 = pg.QtGui.QSplitter()
        self.vs1.setOrientation(pg.QtCore.Qt.Vertical)

        self.params = pt.Parameter(name='params',
                                   type='group',
                                   children=[
                                       self.cell_selector.params,
                                       self.spike_detector.params,
                                       self.averager.params,
                                   ])

        self.tree = pt.ParameterTree(showHeader=False)
        self.tree.setParameters(self.params, showTop=False)
        self.vs1.addWidget(self.tree)

        self.expt_imv = pg.ImageView()
        self.cell_selector.set_imageview(self.expt_imv)

        self.vs1.addWidget(self.expt_imv)

        self.vs2 = pg.QtGui.QSplitter()
        self.vs2.setOrientation(pg.QtCore.Qt.Vertical)

        self.plt1 = pg.PlotWidget()
        self.plt2 = pg.PlotWidget()
        self.plt2.setXLink(self.plt1)
        self.spike_detector.set_plots(self.plt1, self.plt2)

        self.sta_imv = pg.ImageView()
        self.averager.set_imageview(self.sta_imv)

        self.vs2.addWidget(self.plt1)
        self.vs2.addWidget(self.plt2)
        self.vs2.addWidget(self.sta_imv)

        self.hs.addWidget(self.vs1)
        self.hs.addWidget(self.vs2)

        self.layout = QtGui.QGridLayout()
        self.setLayout(self.layout)
        self.layout.addWidget(self.hs)

        self.resize(1400, 800)
        self.hs.setSizes([600, 600])
        self.show()

        self.cell_selector.cell_selection_changed.connect(self.loadCell)
        self.spike_detector.parameters_changed.connect(self.updateSpikes)
        self.averager.parameters_changed.connect(self.updateOutput)

        self.loadCell()
コード例 #22
0
    # ######## SAVE THIS FOR DEBUGGING SEG FAULTS; issues are usually doing something outside the gui thread
    # import sys
    #
    #
    # def trace(frame, event, arg):
    #     print "%s, %s:%d" % (event, frame.f_code.co_filename, frame.f_lineno)
    #     return trace
    #
    #
    # sys.settrace(trace)

    app = QApplication([])

    ## Create window with ImageView widget
    win = QMainWindow()
    win.resize(800, 800)

    p = pg.PlotWidget()
    range = np.arange(0,50,1)
    p.plot(range,models.Gaussian1D.evaluate(range,10,30,5),pen={'color':'r','width':2})
    p.show()

    fitter = FitParameter(p)
    tree = pt.ParameterTree()
    tree.setParameters(fitter,showTop=False)
    win.setCentralWidget(tree)
    win.setWindowTitle('Fitting')
    win.show()

    QApplication.instance().exec_()
コード例 #23
0
ファイル: viewerRMC.py プロジェクト: yugangzhang/Xi-cam
    def __init__(self, paths, worker, parent=None):
        """
        Class that holds image to be processed by HipRMC, image after it has been centered, and HipRMC output

        Attributes
        ----------
        emitter : threads.Emitter
            Holds and emits a signal when fHipRMc done processing
        interrupt : bool
            flag - set true if rmc processing was interrupted; affects post-rmc processes
        cameraLocation : tuple
            2-tuple (x,y) of camera location on input image
        rmcView : ximcam.RmcView.rncView
            Timeline viewer which holds and displays HipRMC output
        orig_image: np.array
            Original input image
        edited_image : np.array
            Image with camera location adjusted to its center
        orig_view : pyqtgraph.ImageView
            Holds the original image
        edited_view : pyqtgraph.ImageView
            Holds the image after camera location adjustment
        image_holder : QtGui.StackedWidget
            Main widget of plugin. Holds original and edited images, as well as HipRMC output, in tabs
        scatteringParams : pyqtgraph.parametertree
            Occupies right side of main widget. Holds configparams
        configparams : pyqtgraph.Parameter
            Class held by scatteringParams which holds parameter values for HipRMC
        output, err : str
            Output and error from HipRMC subprocess call
        headings : QtGui.QTabBar
            Displays name of corresponding tab of image_holder

        Parameters
        ----------
        paths : str/list of str
            Path to input dataset
        worker: threads.Worker
            Worker which queues up jobs and runs them on a QtCore.QThreadpool
        parent : QtGui.QWidget
            parent widget
        args
            Additional arguments
        kwargs
            Additional keyword arguments
        """


        super(inOutViewer, self).__init__(parent=parent)

        self.emitter = threads.Emitter()
        self.interrupt = False
        self.cameraLocation = config.activeExperiment.center
        self.rmc_view= None
        self.edited_image = None
        self.worker = worker


        # holders for original and edited images
        self.orig_view = LogViewer()
        self.orig_view.setContentsMargins(0,0,0,0)
        self.edited_view = LogViewer()
        self.edited_view.setContentsMargins(0,0,0,0)

        if type(paths) == list:
            self.path = paths[0]
        else:
            self.path = paths

        self.image_holder = QtGui.QStackedWidget()
        self.image_holder.setContentsMargins(0,0,0,0)

        # configuring right widget
        sideWidget = QtGui.QWidget()
        sideWidgetFormat = QtGui.QVBoxLayout()
        sideWidgetFormat.setContentsMargins(0, 0, 0, 0)

        # if paths is None, inOutViewer will only hold HipRMC output and the images/parameter table are not necessary
        if paths is not None:

            self.orig_image = np.transpose(loader.loadimage(self.path))
            if len(self.orig_image.shape) > 2:
                self.orig_image = np.transpose(self.orig_image).swapaxes(0,1)
                while len(self.orig_image.shape) > 2:
                    self.orig_image = self.orig_image[:,:,0]
            self.orig_view.setImage(self.orig_image)
            self.orig_view.autoRange()
            try:
                start_size = max(self.orig_image.shape)/10
            except ValueError:
                msg.showMessage("Image must be 2-D")

            scatteringHolder = QtGui.QStackedWidget()

            image_name = self.path.split('/')[-1].split('.')[0]
            self.scatteringParams = pt.ParameterTree()
            params = [{'name': 'Num tiles', 'type': 'int', 'value': 1, 'default': 1},
                      {'name': 'Loading factor', 'type': 'float', 'value': 0.5, 'default': 0.5},
                      {'name': 'Scale factor', 'type': 'int', 'value': 32, 'default': 32},
                      {'name': 'Numsteps factor', 'type': 'int', 'value': 100, 'default': 100},
                      {'name': 'Model start size', 'type': 'int', 'value': start_size},
                      {'name': 'Save name', 'type': 'str', 'value': 'hiprmc_' + image_name},
                      {'name': 'Mask image', 'type': 'str'}]
            self.configparams = pt.Parameter.create(name='Configuration', type='group', children=params)
            self.scatteringParams.setParameters(self.configparams, showTop=False)
            scatteringHolder.addWidget(self.scatteringParams)

            # # is there a better way to check for correct dimensions?
            # if len(self.orig_image.shape) > 2:
            #     shape = (self.orig_image.shape[1], self.orig_image.shape[2])
            # else:
            #     shape = self.orig_image.shape

            self.drawROI(0, 0, self.orig_image.shape[0], self.orig_image.shape[1], 'r',
                         self.orig_view.getImageItem().getViewBox())

            scatteringHolder.setFixedHeight(300)
            sideWidgetFormat.addWidget(scatteringHolder)

        centerButton = QtGui.QPushButton("Center camera location")
        runButton = QtGui.QPushButton("Run RMC processing")
        stopButton = QtGui.QPushButton("Stop RMC")
        sideWidgetFormat.addSpacing(5)
        sideWidgetFormat.addWidget(centerButton)
        sideWidgetFormat.addSpacing(5)
        sideWidgetFormat.addWidget(runButton)
        sideWidgetFormat.addSpacing(5)
        sideWidgetFormat.addWidget(stopButton)
        sideWidgetFormat.addStretch(10)
        sideWidget.setLayout(sideWidgetFormat)

        # connect buttons to processing
        centerButton.clicked.connect(self.center)
        runButton.clicked.connect(self.runRMC)
        stopButton.clicked.connect(self.stop_threads)

        # tab headings for main widget
        self.headings = QtGui.QTabBar(self)
        self.headings.addTab('Original Image')
        self.headings.addTab('Recentered Image')
        self.headings.addTab('RMC Timeline')
        self.headings.addTab('FFT RMC Timeline')
        self.headings.setShape(QtGui.QTabBar.TriangularSouth)


        leftWidget = QtGui.QWidget()
        sidelayout = QtGui.QVBoxLayout()
        sidelayout.addWidget(self.image_holder)
        sidelayout.addWidget(self.headings)
        leftWidget.setLayout(sidelayout)

        fullPlugin = QtGui.QSplitter()
        fullPlugin.addWidget(leftWidget)
        fullPlugin.addWidget(sideWidget)

        h = QtGui.QHBoxLayout()
        h.setContentsMargins(0, 0, 0, 0)
        h.addWidget(fullPlugin)
        self.setLayout(h)

        self.image_holder.addWidget(self.orig_view)
        self.image_holder.addWidget(self.edited_view)

        self.headings.currentChanged.connect(self.currentChanged)
        self.image_holder.currentChanged.connect(self.headings.setCurrentIndex)
コード例 #24
0
ファイル: main.py プロジェクト: rotace/app_icp12_gui
    def __init__(self):
        super().__init__()

        self.area = pgda.DockArea()
        self.setCentralWidget(self.area)
        self.resize(1000,500)
        self.setWindowTitle('app-icp12-gui')

        # Create Docks
        dock1 = pgda.Dock("PORT", size=(300, 300))
        dock2 = pgda.Dock("GRAPH", size=(500, 300))
        dock3 = pgda.Dock("SETTING", size=(400, 300))
        
        self.area.addDock(dock1, 'left')
        self.area.addDock(dock2, 'right')
        self.area.addDock(dock3, 'right')

        # Create Tree
        a0 = PinTreeWidgetItem(["A0"], color='b')
        a1 = PinTreeWidgetItem(["A1"], color='g')
        a2 = PinTreeWidgetItem(["A2"], color='r')
        a3 = PinTreeWidgetItem(["A3"], color='c')
        a5 = PinTreeWidgetItem(["A5"], color='y')
        b0 = PinTreeWidgetItem(["B0"], analog=False)
        b1 = PinTreeWidgetItem(["B1"], analog=False)
        b2 = PinTreeWidgetItem(["B2"], color='w')
        c0 = PinTreeWidgetItem(["C0"], analog=False)
        c1 = PinTreeWidgetItem(["C1"], analog=False)
        c2 = PinTreeWidgetItem(["C2"], analog=False)
        c6 = PinTreeWidgetItem(["C6"], analog=False)
        c7 = PinTreeWidgetItem(["C7"], analog=False)

        self.d1tree = pg.TreeWidget()
        self.d1tree.setColumnCount(5)
        self.d1tree.addTopLevelItem(a0)
        self.d1tree.addTopLevelItem(a1)
        self.d1tree.addTopLevelItem(a2)
        self.d1tree.addTopLevelItem(a3)
        self.d1tree.addTopLevelItem(a5)
        self.d1tree.addTopLevelItem(b0)
        self.d1tree.addTopLevelItem(b1)
        self.d1tree.addTopLevelItem(b2)
        self.d1tree.addTopLevelItem(c0)
        self.d1tree.addTopLevelItem(c1)
        self.d1tree.addTopLevelItem(c2)
        self.d1tree.addTopLevelItem(c6)
        self.d1tree.addTopLevelItem(c7)
        [i.cbx_analog.clicked.connect(self.reg_plot) for i in self.d1tree.listAllItems() ]
        self.d1tree.setHeaderLabels(["Name", "Type", "Status", "Analog", "Record"])
        self.d1tree.header().setResizeMode(QtWidgets.QHeaderView.ResizeToContents)
        # self.d1tree.header().setStretchLastSection(False)
        dock1.addWidget(self.d1tree)
        self.d1tree.setEnabled(False)

        # Create Graph
        d2view = pg.GraphicsView()
        d2layout = pg.GraphicsLayout(border=(100,100,100))
        d2view.setCentralItem(d2layout)
        self.d2label = d2layout.addLabel("Plot")
        d2layout.nextRow()
        self.d2plot = d2layout.addPlot()
        self.d2plot.setLabel('left', 'Voltatge', units='V')
        self.d2plot.setLabel('bottom', 'Samples', units='-')
        self.d2plot.setXRange(0,g_samples)
        self.d2plot.setYRange(-1, 6)
        self.d2plot.showGrid(x=True, y=True)
        self.d2plot_leg = self.d2plot.addLegend()
        dock2.addWidget(d2view)

        # Create ParamterTree
        self.device_parameter = DeviceParameter(name='DEVICE')
        self.device_parameter.sigConnectionChanged.connect(self.d1tree.setEnabled)
        params = [
            self.device_parameter,
            {'name': 'LOGGING', 'type': 'group', 'children': [
                {'name': 'Dummy', 'type': 'list', 'values': ['1', '2'], 'value': '2'},
            ]},
            {'name': 'SIGNAL', 'type': 'group', 'children': [
                {'name': 'Dummy', 'type': 'list', 'values': ['1', '2'], 'value': '2'},
            ]},
            {'name': 'SCALE', 'type': 'group', 'children': [
                {'name': 'Dummy', 'type': 'list', 'values': ['1', '2'], 'value': '2'},
            ]},
            {'name': 'TRIGGER', 'type': 'group', 'children': [
                {'name': 'Dummy', 'type': 'list', 'values': ['1', '2'], 'value': '2'},
            ]},
            {'name': 'DISPLAY', 'type': 'group', 'children': [
                {'name': 'Dummy', 'type': 'list', 'values': ['1', '2'], 'value': '2'},
            ]},
            {'name': 'CONTROL', 'type': 'group', 'children': [
                {'name': 'Dummy', 'type': 'list', 'values': ['1', '2'], 'value': '2'},
            ]},    
            {'name': 'SAVE/LOAD', 'type': 'group', 'children': [
                {'name': 'Save State', 'type': 'action'},
                {'name': 'Load State', 'type': 'action', 'children': [
                    {'name': 'Add missing items', 'type': 'bool', 'value': True},
                    {'name': 'Remove extra items', 'type': 'bool', 'value': True},
                ]},
            ]},          
        ]

        self.d3param = pgpt.Parameter.create(name='params', type='group', children=params)
        self.d3param.sigTreeStateChanged.connect(self.change)
        for ch1 in self.d3param.children():
            ch1.sigValueChanging.connect(self.changing)
            for ch2 in ch1.children():
                ch2.sigValueChanging.connect(self.changing)
        
        self.d3param.param('SAVE/LOAD', 'Save State').sigActivated.connect(self.save)
        self.d3param.param('SAVE/LOAD', 'Load State').sigActivated.connect(self.load)

        d3tree = pgpt.ParameterTree()
        d3tree.setParameters(self.d3param, showTop=False)
        d3tree.setWindowTitle('pyqtgraph example Parameter Tree')
        dock3.addWidget(d3tree)

        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.update)
        self.timer.start(0)
        self.timer_counter = 0
        self.old_time = time.time()
コード例 #25
0
        dict(name='useCache', title='useCache:    ', type='bool', value=True),
        dict(name='mode',
             title=translate('ScatterPlot', 'Mode:    '),
             type='list',
             values={
                 translate('ScatterPlot', 'New Item'): 'newItem',
                 translate('ScatterPlot', 'Reuse Item'): 'reuseItem',
                 translate('ScatterPlot', 'Simulate Pan/Zoom'): 'panZoom',
                 translate('ScatterPlot', 'Simulate Hover'): 'hover'
             },
             value='reuseItem'),
    ])
for c in param.children():
    c.setDefault(c.value())

pt = ptree.ParameterTree(showHeader=False)
pt.setParameters(param)
p = pg.PlotWidget()
splitter = QtWidgets.QSplitter()
splitter.addWidget(pt)
splitter.addWidget(p)
splitter.show()

data = {}
item = pg.ScatterPlotItem()
hoverBrush = pg.mkBrush('y')
ptr = 0
lastTime = time()
fps = None
timer = QtCore.QTimer()
コード例 #26
0
    def __init__(self, default_session, notes_session):
        pg.QtGui.QWidget.__init__(self)
        self.default_session = default_session
        self.notes_session = notes_session
        self.layout = pg.QtGui.QGridLayout()
        self.setLayout(self.layout)
        self.h_splitter = pg.QtGui.QSplitter()
        self.h_splitter.setOrientation(pg.QtCore.Qt.Horizontal)
        self.pair_analyzer = PairAnalysis()
        self.fit_explorer = None
        self.ctrl_panel = self.pair_analyzer.ctrl_panel
        self.user_params = self.ctrl_panel.user_params
        self.output_params = self.ctrl_panel.output_params
        self.ptree = ptree.ParameterTree(showHeader=False)
        self.pair_param = Parameter.create(name='Current Pair', type='str', readonly=True)
        self.ptree.addParameters(self.pair_param)
        self.ptree.addParameters(self.user_params, showTop=False)
        self.fit_ptree = ptree.ParameterTree(showHeader=False)
        self.fit_ptree.addParameters(self.output_params, showTop=False)
        self.save_btn = pg.FeedbackButton('Save Analysis')
        self.expt_btn = pg.QtGui.QPushButton('Set Experiments')
        self.fit_btn = pg.QtGui.QPushButton('Fit Responses')
        self.ic_plot = self.pair_analyzer.ic_plot
        self.vc_plot = self.pair_analyzer.vc_plot
        self.select_ptree = ptree.ParameterTree(showHeader=False)
        self.hash_select = Parameter.create(name='Hashtags', type='group', children=
            [{'name': 'With multiple selected:', 'type': 'list', 'values': ['Include if any appear', 'Include if all appear'], 'value': 'Include if any appear'}]+
            [{'name': '#', 'type': 'bool'}] +
            [{'name': ht, 'type': 'bool'} for ht in comment_hashtag[1:]])
        self.rigs = db.query(db.Experiment.rig_name).distinct().all()
        self.operators = db.query(db.Experiment.operator_name).distinct().all()
        self.rig_select = Parameter.create(name='Rig', type='group', children=[{'name': rig[0], 'type': 'bool'} for rig in self.rigs])
        self.operator_select = Parameter.create(name='Operator', type='group', children=[{'name': operator[0], 'type': 'bool'} for operator in self.operators])
        self.data_type = Parameter.create(name='Reduce data to:', type='group', children=[
            {'name': 'Pairs with data', 'type': 'bool', 'value': True},
            {'name': 'Synapse is None', 'type': 'bool'}])
        [self.select_ptree.addParameters(param) for param in [self.data_type, self.rig_select, self.operator_select, self.hash_select]]
        self.experiment_browser = self.pair_analyzer.experiment_browser
        self.v_splitter = pg.QtGui.QSplitter()
        self.v_splitter.setOrientation(pg.QtCore.Qt.Vertical)
        self.expt_splitter = pg.QtGui.QSplitter()
        self.expt_splitter.setOrientation(pg.QtCore.Qt.Vertical)
        self.h_splitter.addWidget(self.expt_splitter)
        self.expt_splitter.addWidget(self.select_ptree)
        self.expt_splitter.addWidget(self.expt_btn)
        self.h_splitter.addWidget(self.v_splitter)
        self.v_splitter.addWidget(self.experiment_browser)
        self.v_splitter.addWidget(self.ptree)
        self.v_splitter.addWidget(self.fit_btn)
        self.v_splitter.addWidget(self.fit_ptree)
        self.v_splitter.addWidget(self.save_btn)
        self.v_splitter.setSizes([200, 20, 20,400, 20])
        # self.next_pair_button = pg.QtGui.QPushButton("Load Next Pair")
        # self.v_splitter.addWidget(self.next_pair_button)
        self.h_splitter.addWidget(self.vc_plot.grid)
        self.h_splitter.addWidget(self.ic_plot.grid)
        self.fit_compare = self.pair_analyzer.fit_compare
        self.meta_compare = self.pair_analyzer.meta_compare
        self.v2_splitter = pg.QtGui.QSplitter()
        self.v2_splitter.setOrientation(pg.QtCore.Qt.Vertical)
        self.v2_splitter.addWidget(self.fit_compare)
        self.v2_splitter.addWidget(self.meta_compare)
        self.h_splitter.addWidget(self.v2_splitter)
        self.h_splitter.setSizes([100, 200, 200, 200, 500])
        self.layout.addWidget(self.h_splitter)
        self.fit_compare.hide()
        self.meta_compare.hide()
        self.setGeometry(280, 130, 1500, 900)
        self.show()

        # self.next_pair_button.clicked.connect(self.load_next_pair)
        self.experiment_browser.itemSelectionChanged.connect(self.selected_pair)
        self.save_btn.clicked.connect(self.save_to_db)
        self.expt_btn.clicked.connect(self.get_expts)
        self.fit_btn.clicked.connect(self.pair_analyzer.fit_response_update)