Esempio n. 1
0
    def __init__(self, limit=0, no_thread=False):
        QtGui.QWidget.__init__(self)

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

        self.expt_tree = pg.TreeWidget()
        self.expt_tree.setSortingEnabled(True)
        self.fields = [
            'timestamp', 'path', 'rig', 'description', 'primary', 'archive',
            'backup', 'NAS', 'pipettes.yml', 'site.mosaic', 'DB', 'LIMS',
            '20x', 'cell specs', '63x', 'morphology'
        ]
        self.expt_tree.setColumnCount(len(self.fields))
        self.expt_tree.setHeaderLabels(self.fields)
        self.layout.addWidget(self.expt_tree, 0, 0)

        self.resize(1000, 900)

        self.records = {}

        self.poll_thread = PollThread(limit=limit)
        self.poll_thread.update.connect(self.poller_update)
        if no_thread:
            self.poll_thread.poll()  # for local debugging
        else:
            self.poll_thread.start()
Esempio n. 2
0
    def __init__(self):
        super(BvLayerCtrl, self).__init__()

        self.layout = QtGui.QHBoxLayout()
        self.setLayout(self.layout)

        self.edgeLayerTree = pg.TreeWidget(parent=self)
        self.edgeLayerTree.setColumnCount(1)
        self.edgeLayerTree.setAcceptDrops(False)
        self.edgeLayerTree.setDragEnabled(False)

        self.edgeLayerTree.setColumnCount(1)

        self.labeslItem = QtGui.QTreeWidgetItem(["Labels"])
        self.featuresItem = QtGui.QTreeWidgetItem(["Features"])
        self.predictionsItem = QtGui.QTreeWidgetItem(["Predictions"])

        self.edgeLayerTree.addTopLevelItem(self.labeslItem)
        self.edgeLayerTree.addTopLevelItem(self.featuresItem)
        self.edgeLayerTree.addTopLevelItem(self.predictionsItem)

        self.layout.addWidget(self.edgeLayerTree)

        self.edgeLayerTree.itemClicked.connect(self.onItemActivated)
        self.edgeLayerTree.itemActivated.connect(self.onItemActivated)
        self.edgeLayerTree.itemEntered.connect(self.onItemActivated)
Esempio n. 3
0
 def setupGUI(self):
     self.setWindowTitle("Combo Plot List")
     self.setGeometry(420, 350, 570, 200)
     self.centralWidget = QtGui.QWidget()
     self.setCentralWidget(self.centralWidget)
     self.centralLayout = QtGui.QVBoxLayout()
     self.centralWidget.setLayout(self.centralLayout)
     self.tree = pg.TreeWidget()
     self.centralLayout.addWidget(self.tree)
     self.buttonsWidget = QtGui.QWidget()
     self.centralLayout.addWidget(self.buttonsWidget)
     self.centralLayout.setContentsMargins(0, 0, 0, 0)
     # set up button layout
     self.buttonLayout = QtGui.QHBoxLayout()
     self.buttonsWidget.setLayout(self.buttonLayout)
     self.plotButton = QtGui.QPushButton()
     self.customizeButton = QtGui.QPushButton()
     self.plotButton.setText("Plot")
     self.customizeButton.setText("Customize")
     self.buttonLayout.addWidget(self.plotButton)
     self.buttonLayout.addWidget(self.customizeButton)
     self.buttonLayout.setContentsMargins(0, 0, 0, 0)
     ## set up tree widget
     self.tree.setHeaderHidden(True)
     self.tree.setDragEnabled(False)
     self.tree.setColumnCount(4)
     self.tree.setColumnWidth(0, 400)
     self.tree.setColumnWidth(1, 70)
     self.tree.setColumnWidth(2, 60)
     self.tree.setColumnWidth(3, 35)
Esempio n. 4
0
 def setupGUI(self):
     self.setWindowTitle("Edit Gradients")
     self.setGeometry(500, 300, 400, 200)
     self.layout = QtGui.QVBoxLayout()
     self.setLayout(self.layout)
     self.layout.setContentsMargins(0, 0, 0, 0)
     self.tree = pg.TreeWidget()
     self.layout.addWidget(self.tree)
     self.tree.setHeaderHidden(True)
     self.tree.setDragEnabled(False)
     self.tree.setIndentation(10)
     self.tree.setColumnCount(3)
     self.sItem = pg.TreeWidgetItem(['Original Sonic Data'])
     self.fItem = pg.TreeWidgetItem(['Fourrier Transform'])
     self.pItem = pg.TreeWidgetItem(['Fourrier Phases'])
     self.tree.addTopLevelItem(self.sItem)
     self.tree.addTopLevelItem(self.fItem)
     self.tree.addTopLevelItem(self.pItem)
     self.sgw = pg.GradientWidget(orientation='top')
     self.fgw = pg.GradientWidget(orientation='top')
     self.pgw = pg.GradientWidget(orientation='top')
     self.sItem.setWidget(2, self.sgw)
     self.fItem.setWidget(2, self.fgw)
     self.pItem.setWidget(2, self.pgw)
     self.tree.setColumnWidth(0, 150)
     #### widget of ok and Cancel buttons
     self.buttonsWidget = QtGui.QWidget()
     self.buttonLayout = QtGui.QHBoxLayout()
     self.buttonsWidget.setLayout(self.buttonLayout)
     self.okButton = QtGui.QPushButton("OK")
     self.cancelButton = QtGui.QPushButton("Cancel")
     self.buttonLayout.addWidget(self.okButton)
     self.buttonLayout.addWidget(self.cancelButton)
     self.buttonLayout.setContentsMargins(0, 0, 0, 5)
     self.layout.addWidget(self.buttonsWidget)
Esempio n. 5
0
    def setupGUI(self):
        self.setWindowTitle("Calculator plot")
        self.setGeometry(80, 50, 800, 600)
        self.setWindowIcon(QtGui.QIcon('../images/Logo.png'))
        pg.setConfigOption('background', (255, 255, 255))
        pg.setConfigOption('foreground', (0, 0, 0))
        self.layout = QtGui.QVBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.setSpacing(0)
        self.setLayout(self.layout)
        # split window into two halfs
        self.splitter = QtGui.QSplitter()
        self.splitter.setOrientation(QtCore.Qt.Horizontal)
        self.layout.addWidget(self.splitter)

        self.tree = pg.TreeWidget()
        self.sublayout = pg.GraphicsLayoutWidget()
        self.splitter.addWidget(self.tree)
        self.splitter.addWidget(self.sublayout)
        self.plt = self.sublayout.addPlot()
        setup_plot(self.plt)
        pg.setConfigOptions(antialias=True)

        self.tree.setHeaderHidden(True)
        self.tree.setDragEnabled(False)
        self.tree.setIndentation(10)
        self.tree.setColumnCount(3)
        self.tree.setColumnWidth(0, 110)
        self.tree.setColumnWidth(1, 90)
        self.tree.setColumnWidth(2, 5)

        optItem = pg.TreeWidgetItem(['Options'])
        xNameItem = pg.TreeWidgetItem(['x title'])
        yNameItem = pg.TreeWidgetItem(['y title'])
        optItem.addChild(xNameItem)
        optItem.addChild(yNameItem)

        addPlotItem = pg.TreeWidgetItem()
        self.addPlotButton = QtGui.QPushButton('Add')
        self.enterAction = QtGui.QAction('', self, shortcut='Return')
        self.addAction(self.enterAction)
        self.applyButton = QtGui.QPushButton('Apply')
        self.applyButton.setDisabled(True)

        addPlotItem.setWidget(0, self.applyButton)
        addPlotItem.setWidget(1, self.addPlotButton)
        self.items = pg.TreeWidgetItem(['Items'])
        self.tree.addTopLevelItem(optItem)
        self.tree.addTopLevelItem(self.items)
        self.tree.addTopLevelItem(pg.TreeWidgetItem())
        self.tree.addTopLevelItem(addPlotItem)
        optItem.setExpanded(True)

        self.xNameEdit = QtGui.QLineEdit('X')
        self.yNameEdit = QtGui.QLineEdit('Y')
        xNameItem.setWidget(1, self.xNameEdit)
        yNameItem.setWidget(1, self.yNameEdit)
        self.plt.setLabel('bottom', 'X', **LabelStyle)
        self.plt.setLabel('left', 'Y', **LabelStyle)
Esempio n. 6
0
    def setupGUI(self):
        self.setWindowTitle("Edit effectibve stress formula")
        self.setGeometry(500, 300, 350, 200)
        # self.centralWidget = QtGui.QWidget()
        # self.setCentralWidget(self.centralWidget)
        self.centralLayout = QtGui.QVBoxLayout()
        # self.centralWidget.setLayout(self.centralLayout)
        self.setLayout(self.centralLayout)
        self.variablesText = QtGui.QLabel('')

        tree = pg.TreeWidget()
        tree.setHeaderHidden(True)
        tree.setIndentation(0)
        tree.setColumnCount(3)

        # stuff to make gray background for tree widget
        g = pg.mkBrush(240, 240, 240)
        b = pg.mkBrush(0, 0, 0)
        w = pg.mkBrush(255, 255, 255)
        bgBrush = pg.mkBrush(255, 0, 0)
        tree.setFrameShape(QtGui.QFrame.NoFrame)
        palette = QtGui.QPalette(g, g, g, g, g, b, b, g, g)
        # tree.setPalette(palette)

        axStressItem = pg.TreeWidgetItem(['Axial stress'])
        # axStressItem.setTextAlignment(0,0)
        # axStressItem.setBackground(1,w)
        confStressItem = pg.TreeWidgetItem(['Confining pressure'])
        # confStressItem.setTextAlignment(0,0)
        porePressItem = pg.TreeWidgetItem(['Pore pressure'])
        biotItem = pg.TreeWidgetItem(['Biot coefficient'])
        porePressItem.setTextAlignment(0, 0)

        self.axStressBox = QtGui.QLineEdit()
        self.confStressBox = QtGui.QLineEdit()
        self.porePressBox = QtGui.QLineEdit()
        self.biotBox = pg.SpinBox(value=1, bounds=[0.5, 1], step=0.1)

        axStressItem.setWidget(1, self.axStressBox)
        confStressItem.setWidget(1, self.confStressBox)
        biotItem.setWidget(1, self.biotBox)

        porePressItem.setWidget(1, self.porePressBox)
        tree.addTopLevelItem(axStressItem)
        tree.addTopLevelItem(confStressItem)
        tree.addTopLevelItem(porePressItem)
        tree.addTopLevelItem(biotItem)

        self.centralLayout.addWidget(self.variablesText)
        self.centralLayout.addWidget(tree)
        # self.centralLayout.addWidget(self.buttonsWidget)

        tree.setColumnWidth(0, 120)
        tree.setColumnWidth(1, 170)
        tree.setColumnWidth(2, 10)
Esempio n. 7
0
    def __init__(self):
        super(LayersCtrlWidget, self).__init__()

        self.pixelLayers = dict()
        self.pixelLayersItem = QtGui.QTreeWidgetItem(["PixelLayers"])

        ## Create tree of Parameter objects
        self.treeWidget = pg.TreeWidget()
        self.treeWidget.setColumnCount(1)

        self.setupUI()
Esempio n. 8
0
 def __init__(self, stripTool, parent = None):
     super(stripLegend, self).__init__(parent)
     self.stripTool = stripTool
     self.records = stripTool.records
     self.layout = pg.TreeWidget()
     self.layout.header().close()
     self.layout.setColumnCount(2)
     self.layout.header().setResizeMode(0,QtGui.QHeaderView.Stretch)
     self.layout.setColumnWidth(2,50)
     self.layout.header().setStretchLastSection(False)
     self.newRowNumber = 0
     self.deleteIcon  = QtGui.QIcon(str(os.path.dirname(os.path.abspath(__file__)))+'\icons\delete.png')
Esempio n. 9
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('config', help="Configuration JSON file")
    args = parser.parse_args()

    try:
        config = json.load(open(args.config))
    except FileNotFoundError:
        print('Unable to open "{}"'.format(args.config))
        return

    rx_queue = Queue()

    app_state = {'accept_data': True}

    def on_accept_data_changed(value):
        app_state['accept_data'] = value

    args = ('127.0.0.1', 65432, rx_queue)
    socket_thread = threading.Thread(target=socket_listener, args=args)
    socket_thread.daemon = True
    socket_thread.start()

    app = QtGui.QApplication([])
    pg.setConfigOptions(antialias=True)

    win = QtGui.QMainWindow()
    win.setWindowTitle("Let's Watch Data")

    area = DockArea()
    win.setCentralWidget(area)

    params_tree_dock = Dock("Parameters", size=(1, 1))
    area.addDock(params_tree_dock)
    params_tree = pg.TreeWidget()
    params_tree.setColumnCount(2)
    params_tree_dock.addWidget(params_tree)

    put_accept_data_in_tree(params_tree, on_accept_data_changed)
    update_memory_fn = put_memory_in_tree(params_tree)
    memory_update_timer = QtCore.QTimer()
    memory_update_timer.timeout.connect(update_memory_fn)
    memory_update_timer.start(1000)

    pm = ParamManager(area, params_tree, config)

    timer = QtCore.QTimer()
    timer.timeout.connect(lambda: update_gui(rx_queue, pm, app_state))
    timer.start(30)

    win.show()
    app.exec_()
Esempio n. 10
0
 def setupGUI(self):
     self.setWindowTitle("Customize Combo plot")
     self.setGeometry(500, 300, 400, 300)
     # add central widget to window
     # set layout to central widget
     # add treewidget and another widget to
     # place button layout
     self.centralWidget = QtGui.QWidget()
     self.setCentralWidget(self.centralWidget)
     self.centralLayout = QtGui.QVBoxLayout()
     self.centralWidget.setLayout(self.centralLayout)
     self.tree = pg.TreeWidget()
     self.centralLayout.addWidget(self.tree)
     self.buttonsWidget = QtGui.QWidget()
     self.centralLayout.addWidget(self.buttonsWidget)
     self.centralLayout.setContentsMargins(0, 0, 0, 0)
     # set up button layout
     self.buttonLayout = QtGui.QHBoxLayout()
     self.buttonsWidget.setLayout(self.buttonLayout)
     self.OkButton = QtGui.QPushButton()
     self.CancelButton = QtGui.QPushButton()
     self.OkButton.setText("OK")
     self.CancelButton.setText("Cancel")
     self.buttonLayout.addWidget(self.OkButton)
     self.buttonLayout.addWidget(self.CancelButton)
     self.buttonLayout.setContentsMargins(0, 0, 0, 0)
     ## set up tree widget
     self.tree.setHeaderHidden(True)
     self.tree.setDragEnabled(False)
     self.tree.setColumnCount(3)
     self.tree.setColumnWidth(0, 100)
     self.tree.setColumnWidth(1, 270)
     self.tree.setColumnWidth(2, 10)
     self.xNameParameter = pg.TreeWidgetItem(['X axis'])
     self.yNameParameter = pg.TreeWidgetItem(['Y axis'])
     self.fontSizeParameter = pg.TreeWidgetItem(['Font size'])
     self.tree.addTopLevelItem(self.xNameParameter)
     self.tree.addTopLevelItem(self.yNameParameter)
     self.tree.addTopLevelItem(self.fontSizeParameter)
     self.xNameBox = QtGui.QLineEdit()
     self.yNameBox = QtGui.QLineEdit()
     self.xNameBox.setText(self.xname)
     self.yNameBox.setText(self.yname)
     self.fontSizeBox = pg.SpinBox(value=self.fsize,
                                   bounds=[10, 20],
                                   step=1)
     self.xNameParameter.setWidget(1, self.xNameBox)
     self.yNameParameter.setWidget(1, self.yNameBox)
     self.fontSizeParameter.setWidget(1, self.fontSizeBox)
     self.CancelButton.clicked.connect(self.cancel)
Esempio n. 11
0
    def __init__(self):
        QtGui.QWidget.__init__(self)

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

        self.expt_tree = pg.TreeWidget()
        self.expt_tree.setColumnCount(5)
        self.layout.addWidget(self.expt_tree, 0, 0)

        self.resize(1000, 900)

        self.records = {}

        self.poll_thread = PollThread()
        self.poll_thread.update.connect(self.poller_update)
        self.poll_thread.start()
Esempio n. 12
0
    def setupGUI(self):
        pg.setConfigOption('background', (255,255,255))
        pg.setConfigOption('foreground',(0,0,0))
        self.setWindowIcon(QtGui.QIcon('../images/Logo.png')) 
        self.setGeometry(80, 30, 1000, 700)
        # layout is the main layout widget
        self.layout = QtGui.QVBoxLayout()
        # sublayout is a widget we add plot window to
        self.sublayout = pg.GraphicsLayoutWidget()
        self.layout.setContentsMargins(0,0,0,0)
        self.layout.setSpacing(0)
        self.setLayout(self.layout)
        # split window into two halfs
        self.splitter = QtGui.QSplitter()
        self.splitter.setOrientation(QtCore.Qt.Horizontal)
        self.layout.addWidget(self.splitter)

        self.tree = pg.TreeWidget()
        self.splitter.addWidget(self.tree)
        self.splitter.addWidget(self.sublayout)
        self.plt = self.sublayout.addPlot()
        setup_plot(self.plt)
        pg.setConfigOptions(antialias=True)

        self.tree.setHeaderHidden(True)
        self.tree.setDragEnabled(False)
        self.tree.setIndentation(10)
        self.tree.setColumnCount(4)
        self.tree.setColumnWidth(0, 150)
        self.tree.setColumnWidth(1, 20)
        self.tree.setColumnWidth(2, 90)
        self.tree.setColumnWidth(3, 50)
        # self.tree.setColumnWidth(3, 50)
        self.fpoints = pg.TreeWidgetItem(['Failure Points'])
        self.envelopes = pg.TreeWidgetItem(['Failure Envelopes'])
        self.tree.addTopLevelItem(self.fpoints)
        self.tree.addTopLevelItem(self.envelopes)
        self.tree.setDragEnabled(False)
        self.fpoints.setExpanded(True)
        self.envelopes.setExpanded(True)
        addEnvelopeItem = pg.TreeWidgetItem([''])
        self.tree.addTopLevelItem(addEnvelopeItem)
        self.addEnvelopeButton = QtGui.QPushButton('Add Envelope')
        addEnvelopeItem.setWidget(0,self.addEnvelopeButton)
Esempio n. 13
0
    def __initUI__(self):
        '''界面布局'''
        self.area = DockArea()
        self.addWidget((self.area))
        self.cmddock = Dock("操作记录", size=(2, 3))
        self.area.addDock(self.cmddock, "left")

        self.cmdlist = pg.TreeWidget()
        # self.cmdlist.setColumnCount(1)
        self.cmdlist.setHeaderLabel('操作记录')
        self.cmdlist.setColumnCount(2)
        self.cmdlist.setHeaderLabels(['操作记录', '调整参数'])
        self.cmdlist.setColumnWidth(0, 200)
        self.cmdlist.setColumnWidth(0, 150)
        self.cmdlist.setDragEnabled(False)
        self.cmdlist.setAcceptDrops(False)
        self.cmddock.addWidget(self.cmdlist)

        self.resize(400, 300)
Esempio n. 14
0
 def __init__(self):
     QtGui.QWidget.__init__(self)
     self.neuron_data = None
     self.setWindowTitle(
         "Experiment Control - Data Analysis & Visualization")
     self.layout = QtGui.QVBoxLayout()
     self.layout.setContentsMargins(0, 0, 0, 0)
     self.setLayout(self.layout)
     self.splitter = QtGui.QSplitter()
     self.splitter.setOrientation(QtCore.Qt.Horizontal)
     self.splitter2 = QtGui.QSplitter()
     self.splitter2.setOrientation(QtCore.Qt.Vertical)
     self.layout.addWidget(self.splitter)
     self.splitter.addWidget(self.splitter2)
     self.plot_widget = pg.GraphicsLayoutWidget()
     self.tree = ParameterTree(showHeader=False)
     self.params = Parameter.create(name='params',
                                    type='group',
                                    children=[
                                        dict(name='Reanalyze',
                                             type='bool',
                                             value=False),
                                        dict(name='Load', type='action'),
                                        dict(name='GCFR-sigma (ms)',
                                             type='float',
                                             value=100.0,
                                             step=0.1,
                                             limits=[1, 5000]),
                                        dict(name='Save', type='action'),
                                    ])
     self.tree.setParameters(self.params, showTop=False)
     #self.params.param('Save').sigActivated.connect(self.SavePlot)
     self.params.param('Load').sigActivated.connect(self.OpenDataFile)
     self.splitter2.addWidget(self.tree)
     self.trial_list_tree = pg.TreeWidget(parent=self.splitter2)
     self.splitter.addWidget(self.plot_widget)
     self.trial_list_tree.setColumnCount(1)
Esempio n. 15
0
    def __init__(self,
                 use_cache=True,
                 cache_dir="./pylardcache",
                 daefile=os.path.dirname(__file__) +
                 "/microboone_32pmts_nowires_cryostat.dae",
                 background=None):
        super(DetectorDisplay, self).__init__()
        self.treeitems = OrderedDict()
        self.daefile = daefile
        self.load_geometry(self.daefile)

        # user items (this tracks items. is tree widget displayed by detcontrol widget)
        self.user_items = {}  # dict of name and visitem
        self.user_item_checkboxes = {
        }  # dict of name and checkbox governing if active
        self.map_user_checkboxes2name = {}
        self.user_subitem_cbxs = {}
        self.drawn_user_item_names = []
        self.drawn_user_items = {}
        self.user_item_tree = pg.TreeWidget()
        self.user_item_tree.setColumnCount(2)

        if background is not None:
            self.setBackgroundColor(background)
Esempio n. 16
0
# -*- coding: utf-8 -*-
"""
Simple demonstration of TreeWidget, which is an extension of QTreeWidget
that allows widgets to be added and dragged within the tree more easily.
"""
import initExample  ## Add path to library (just for examples; you do not need this)

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui, QtWidgets
import numpy as np

app = QtWidgets.QApplication([])

w = pg.TreeWidget()
w.setColumnCount(2)
w.show()
w.setWindowTitle('pyqtgraph example: TreeWidget')

i1 = QtWidgets.QTreeWidgetItem(["Item 1"])
i11 = QtWidgets.QTreeWidgetItem(["Item 1.1"])
i12 = QtWidgets.QTreeWidgetItem(["Item 1.2"])
i2 = QtWidgets.QTreeWidgetItem(["Item 2"])
i21 = QtWidgets.QTreeWidgetItem(["Item 2.1"])
i211 = pg.TreeWidgetItem(["Item 2.1.1"])
i212 = pg.TreeWidgetItem(["Item 2.1.2"])
i22 = pg.TreeWidgetItem(["Item 2.2"])
i3 = pg.TreeWidgetItem(["Item 3"])
i4 = pg.TreeWidgetItem(["Item 4"])
i5 = pg.TreeWidgetItem(["Item 5"])
b5 = QtWidgets.QPushButton('Button')
i5.setWidget(1, b5)
Esempio n. 17
0
    def __init__(self, limit=0, no_thread=False, filter_defaults=None):
        QtGui.QWidget.__init__(self)

        # fields displayed in ui
        self.visible_fields = [
            ('timestamp', float), 
            ('rig', 'U100'), 
            ('operator', 'U100'), 
            ('path', 'U100'), 
            ('project', 'U100'),
            ('description', 'U100'), 
            ('primary', 'U100'), 
            ('archive', 'U100'), 
            ('NAS', 'U100'), 
            ('backup', 'U100'), 
            ('data', 'U100'),
            ('submitted', 'U100'),
            ('connections', 'U100'),
            ('site.mosaic', 'U100'), 
            ('DB', 'U100'), 
            ('LIMS', 'U100'), 
            ('20x', 'U100'), 
            ('cell map', 'U100'), 
            ('63x', 'U100'), 
            ('morphology', 'U100')
        ]

        # data tracked but not displayed
        self.hidden_fields = [
            ('experiment', object),
            ('lims_slice_name', object),
            ('item', object),
            ('error', object),
            ('db_errors', object),
        ]

        # maps field name : index (column number)
        self.field_indices = {self.visible_fields[i][0]:i for i in range(len(self.visible_fields))}

        self.records = GrowingArray(dtype=self.visible_fields + self.hidden_fields)
        self.records_by_expt = {}  # maps expt:index

        self.selected = None

        # set up UI
        self.layout = QtGui.QGridLayout()
        self.setLayout(self.layout)
        self.layout.setContentsMargins(0, 0, 0, 0)

        self.splitter = QtGui.QSplitter(QtCore.Qt.Horizontal)
        self.layout.addWidget(self.splitter, 0, 0)

        self.left_vbox_widget = QtGui.QWidget()
        self.splitter.addWidget(self.left_vbox_widget)
        self.left_vbox = QtGui.QVBoxLayout()
        self.left_vbox_widget.setLayout(self.left_vbox)
        self.left_vbox.setContentsMargins(0, 0, 0, 0)

        self.search_text = QtGui.QLineEdit()
        self.search_text.setPlaceholderText('search')
        # self.search_text.setClearButtonEnabled(True)   # Qt 5
        self.left_vbox.addWidget(self.search_text)
        self.search_text.textChanged.connect(self.search_text_changed)

        self.filter = pg.DataFilterWidget()
        self.filter_fields = OrderedDict([(field[0], {'mode': 'enum', 'values': {}}) for field in self.visible_fields])
        self.filter_fields['timestamp'] = {'mode': 'range'}
        self.filter_fields.pop('path')
        if filter_defaults is not None:
            for k, defs in filter_defaults.items():
                self.filter_fields[k]['values'].update(defs)

        self.filter.setFields(self.filter_fields)
        self.left_vbox.addWidget(self.filter)
        self.filter.sigFilterChanged.connect(self.filter_changed)
        self.filter.addFilter('operator')
        self.filter.addFilter('rig')
        self.filter.addFilter('project')

        self.right_splitter = QtGui.QSplitter(QtCore.Qt.Vertical)
        self.splitter.addWidget(self.right_splitter)

        self.expt_tree = pg.TreeWidget()
        self.expt_tree.setSortingEnabled(True)
        self.expt_tree.setColumnCount(len(self.visible_fields))
        self.expt_tree.setHeaderLabels([f[0] for f in self.visible_fields])
        self.right_splitter.addWidget(self.expt_tree)
        self.expt_tree.itemSelectionChanged.connect(self.tree_selection_changed)

        console_text = """
        Variables:
            records : array of all known records in the dashboard
            records['experiment'] : references to all known Experiment instances
            sel : currently selected dashboard record
            expt : currently selected Experiment
            filter : DataFilterParameter
            lims : multipatch_analysis.lims module
            db : multipatch_analysis.database module
            config : multipatch_analysis.config module
        """
        self.console = pg.console.ConsoleWidget(text=console_text, namespace={
            'filter': self.filter.params,
            'sel': None,
            'records': self.records,
            'config': config,
            'lims': lims,
            'db': database,
            'dashboard': self,
            'np': np,
            'pg': pg,
        })
        self.right_splitter.addWidget(self.console)
        self.console.hide()

        self.console_btn = QtGui.QPushButton('console')
        self.console_btn.setCheckable(True)
        self.console_btn.toggled.connect(self.console_toggled)

        self.poll_btn = QtGui.QPushButton('poll')
        self.poll_btn.setCheckable(True)
        self.poll_btn.setChecked(True)
        self.poll_btn.toggled.connect(self.poll_toggled)

        self.status = QtGui.QStatusBar()
        self.status.setMaximumHeight(25)
        self.layout.addWidget(self.status, 1, 0)
        self.status.addPermanentWidget(self.poll_btn)
        self.status.addPermanentWidget(self.console_btn)

        self.resize(1000, 900)
        self.splitter.setSizes([200, 800])
        colsizes = [150, 50, 100, 230, 150, 200]
        for i in range(len(self.visible_fields)):
            size = colsizes[i] if i < len(colsizes) else 50
            self.expt_tree.setColumnWidth(i, size)

        # Add reload context menu action
        # self.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
        self.reload_action = QtGui.QAction('Reload', self)
        self.reload_action.triggered.connect(self.reload_clicked)
        # self.addAction(self.reload_action)

        self.menu = QtGui.QMenu()
        self.menu.addAction(self.reload_action)
        
        # Add generic experiment context menu actions
        self.expt_actions = ExperimentActions()
        for act in self.expt_actions.actions.values():
            self.menu.addAction(act)
        
        # Queue of experiments to be checked
        self.expt_queue = queue.PriorityQueue()

        # collect a list of all data sources to search
        search_paths = [config.synphys_data]
        for rig_name, rig_path_sets in config.rig_data_paths.items():
            for path_set in rig_path_sets:
                search_paths.extend(list(path_set.values()))

        # Each poller searches a single data source for new experiments, adding them to the queue
        self.pollers = []
        self.poller_status = {}
        for search_path in search_paths:
            if not os.path.exists(search_path):
                print("Ignoring search path:", search_path)
                continue
            poll_thread = PollThread(self.expt_queue, search_path, limit=limit)
            poll_thread.update.connect(self.poller_update)
            if no_thread:
                poll_thread.poll()  # for local debugging
            else:
                poll_thread.start()
            self.pollers.append(poll_thread)

        # Checkers pull experiments off of the queue and check their status
        self._incoming_checker_records = []
        if no_thread:
            self.checker = ExptCheckerThread(self.expt_queue)
            self.checker.update.connect(self.checker_update)
            self.checker.run(block=False)            
        else:
            self.checkers = []
            for i in range(3):
                self.checkers.append(ExptCheckerThread(self.expt_queue))
                self.checkers[-1].update.connect(self.checker_update)
                self.checkers[-1].start()

        # shut down threads nicely on exit
        atexit.register(self.quit)

        self.status_timer = QtCore.QTimer()
        self.status_timer.timeout.connect(self.update_status)
        self.status_timer.start(1000)

        self.handle_checker_record_timer = QtCore.QTimer()
        self.handle_checker_record_timer.timeout.connect(self.handle_all_checker_records)
Esempio n. 18
0
    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()
Esempio n. 19
0
layout6_1 = w1.addLayout(4, 1, 2, 1)
layout6_2 = w1.addLayout(4, 2, 2, 1)
#layout7 = w1.addLayout(5,1,1,2)

#First section of the first dock is for intro text, selection of the scatter plot dock to be updated and the update button

text_intro = QtGui.QLabel(
    'Welcome to the Spike Sorting GUI. For updating the scatter plots, first select a dock to be updated \n \
    (from 1 to 6), then select with respect to which featurres from which electrodes you would like \n to generate the scatter plots. \
    Once you have selected the dock, electrodes and features press Update \n to update the scatter plot.'
)

spin_dock = pg.SpinBox(value=1, bounds=(1, 6), int=True, step=1)
updateScatterBtn = QtGui.QPushButton('Update')

tree1 = pg.TreeWidget()
feat1_1 = QtGui.QTreeWidgetItem(["Amplitude"])
feat1_2 = QtGui.QTreeWidgetItem(["Energy"])
tree1.addTopLevelItem(feat1_1)
tree1.addTopLevelItem(feat1_2)

tree2 = pg.TreeWidget()
feat2_1 = QtGui.QTreeWidgetItem(["Amplitude"])
feat2_2 = QtGui.QTreeWidgetItem(["Energy"])
tree2.addTopLevelItem(feat2_1)
tree2.addTopLevelItem(feat2_2)

spin_electrode1 = pg.SpinBox(value=0, bounds=(0, 3), int=True, step=1)
spin_electrode2 = pg.SpinBox(value=0, bounds=(0, 3), int=True, step=1)

num_seconds = int(len(raw_data[0, :]) / p['sample_rate'])
Esempio n. 20
0
    def setup_buttons(self):
        """
        """

        # Build buttons Dock

        self.dock_buttons_parent = QtGui.QWidget()
        self.dock_buttons_parent.setLayout(QtGui.QHBoxLayout())
        self.dock_buttons.addWidget(self.dock_buttons_parent)

        # Build axis buttons

        self.axis_container = QtGui.QWidget()
        self.axis_container.setLayout(QtGui.QGridLayout())

        self.cb_xaxis_label = QtGui.QLabel('X axis : ')
        self.axis_container.layout().addWidget(self.cb_xaxis_label, 0, 0)
        self.cb_xaxis = QtGui.QComboBox()
        self.axis_container.layout().addWidget(self.cb_xaxis, 0, 1)

        self.cb_yaxis_label = QtGui.QLabel('Y axis : ')
        self.axis_container.layout().addWidget(self.cb_yaxis_label, 1, 0)
        self.cb_yaxis = QtGui.QComboBox()
        self.axis_container.layout().addWidget(self.cb_yaxis, 1, 1)

        self.setup_axis_buttons_label()

        self.cb_xaxis.currentIndexChanged.connect(self.set_xaxis)
        self.cb_yaxis.currentIndexChanged.connect(self.set_yaxis)

        self.dock_buttons_parent.layout().addWidget(self.axis_container)

        # Build undo / redo buttons

        self.history_container = QtGui.QWidget()
        self.history_container.setLayout(QtGui.QGridLayout())

        self.but_undo = QtGui.QPushButton("Undo < (0)")
        self.history_container.layout().addWidget(self.but_undo, 0, 0)
        self.but_undo.clicked.connect(self.undo)

        self.but_redo = QtGui.QPushButton("Redo > (0)")
        self.history_container.layout().addWidget(self.but_redo, 1, 0)
        self.but_redo.clicked.connect(self.redo)

        self.dock_buttons_parent.layout().addWidget(self.history_container)

        # Build select / unselect buttons

        self.selection_container = QtGui.QWidget()
        self.selection_container.setLayout(QtGui.QGridLayout())

        self.but_select_all = QtGui.QPushButton("Select All")
        self.selection_container.layout().addWidget(self.but_select_all, 0, 0)
        self.but_select_all.clicked.connect(self.select_all_items)

        self.but_unselect_all = QtGui.QPushButton("Unselect All")
        self.selection_container.layout().addWidget(self.but_unselect_all, 1,
                                                    0)
        self.but_unselect_all.clicked.connect(self.unselect_all_items)

        self.dock_buttons_parent.layout().addWidget(self.selection_container)

        # Build trajs selector

        if self.len_trajs > 1:
            self.all_trajs_container = QtGui.QWidget()
            self.all_trajs_container.setLayout(QtGui.QGridLayout())

            self.all_trajs_label = QtGui.QLabel()
            self.all_trajs_container.layout().addWidget(
                self.all_trajs_label, 0, 0)

            self.all_trajs_previous = QtGui.QPushButton("Next >")
            self.all_trajs_container.layout().addWidget(
                self.all_trajs_previous, 1, 0)
            self.all_trajs_previous.clicked.connect(self.next_traj)

            self.all_trajs_next = QtGui.QPushButton("Previous <")
            self.all_trajs_container.layout().addWidget(
                self.all_trajs_next, 2, 0)
            self.all_trajs_next.clicked.connect(self.previous_trajs)

            self.dock_buttons_parent.layout().addWidget(
                self.all_trajs_container)

        # Build save button

        if self.save_hook:
            self.dock_buttons_parent.layout().addStretch(1)
            self.but_save = QtGui.QPushButton("Save")
            self.dock_buttons_parent.layout().addWidget(self.but_save)
            self.but_save.clicked.connect(self.save_hook)

        # Build Quit button

        if not self.parent():
            if not self.save_hook:
                self.dock_buttons_parent.layout().addStretch(1)
            self.but_quit = QtGui.QPushButton("Quit")
            self.dock_buttons_parent.layout().addWidget(self.but_quit)
            self.but_quit.clicked.connect(self.close)

        # Build info Panel Dock
        self.dock_info.layout.setContentsMargins(5, 5, 5, 5)

        self.mouse_text = QtGui.QLabel()
        self.dock_info.addWidget(self.mouse_text)

        self.selection_box = QtGui.QGroupBox('Selected Items (0)')
        self.dock_info.addWidget(self.selection_box)

        self.selection_tree = pg.TreeWidget()
        self.selection_tree.setColumnCount(1)
        self.selection_tree.setHeaderLabels(["t_stamp, label"])
        self.selection_box.setLayout(QtGui.QVBoxLayout())
        self.selection_box.layout().addWidget(self.selection_tree)
Esempio n. 21
0
        gui_docks_p4_03_04(d_area, timer, title)
    elif text == 'P4.03.06':
        gui_docks_p4_03_06(d_area, timer, title, use_mpl=True)
    elif text == 'P4.04.41':
        gui_docks_p4_04_41(d_area, timer, title)
    elif text == 'P4.04.53':
        gui_docks_p4_04_53(d_area, timer, title)
    elif text == 'A4.1.2':
        gui_docks_a4_04_53(d_area, timer, title)
    elif text == u'Ü3.1':
        gui_docks_ue3_1(d_area, timer, title)


wind = QtGui.QWidget()
area = DockArea()
tree = pg.TreeWidget()
btn_3 = QtGui.QPushButton('STOP')
vlayout_0 = QtGui.QVBoxLayout()
splitter = QtGui.QSplitter()
shared_timer = pg.QtCore.QTimer()

splitter.addWidget(tree)
splitter.addWidget(area)
splitter.setSizes([app_width * 1 / 3.0, app_width * 2 / 3.0])

vlayout_0.addWidget(splitter)
vlayout_0.addWidget(btn_3)

wind.setLayout(vlayout_0)
wind.setWindowTitle('Walas problems')
wind.resize(app_width, app_height)