Пример #1
0
    def populate(self):
        self.items_by_pair_id = {}
        
        self.session = db.Session()
        db_expts = db.list_experiments(session=self.session)
        db_expts.sort(key=lambda e: e.acq_timestamp)
        for expt in db_expts:
            date = expt.acq_timestamp
            date_str = datetime.fromtimestamp(date).strftime('%Y-%m-%d')
            slice = expt.slice
            expt_item = pg.TreeWidgetItem(map(str, [date_str, expt.rig_name, slice.species, expt.target_region, slice.genotype, expt.acsf]))
            expt_item.expt = expt
            self.addTopLevelItem(expt_item)

            for pair in expt.pairs:
                if pair.n_ex_test_spikes == 0 and pair.n_in_test_spikes == 0:
                    continue
                cells = '%d => %d' % (pair.pre_cell.ext_id, pair.post_cell.ext_id)
                conn = {True:"syn", False:"-", None:"?"}[pair.synapse]
                types = 'L%s %s => L%s %s' % (pair.pre_cell.target_layer or "?", pair.pre_cell.cre_type, pair.post_cell.target_layer or "?", pair.post_cell.cre_type)
                pair_item = pg.TreeWidgetItem([cells, conn, types])
                expt_item.addChild(pair_item)
                pair_item.pair = pair
                pair_item.expt = expt
                self.items_by_pair_id[pair.id] = pair_item
Пример #2
0
    def addVisItem(self, name, visitem):
        print "[detector display] received visitem=", name
        self.user_items[name] = visitem
        self.user_item_checkboxes[name] = QtGui.QCheckBox('')
        self.map_user_checkboxes2name[self.user_item_checkboxes[name]] = name
        self.user_item_checkboxes[name].setChecked(True)
        # connect to signal
        # multiple sub-objects!
        if type(visitem) is list:
            self.user_subitem_cbxs[name] = []
            for ix, subitem in enumerate(visitem):
                self.user_subitem_cbxs[name].append(QtGui.QCheckBox(''))
                self.user_subitem_cbxs[name][ix].setChecked(True)

        # make tree widget item
        item = pg.TreeWidgetItem(['', name])
        item.setWidget(0, self.user_item_checkboxes[name])
        self.user_item_tree.addTopLevelItem(item)

        if type(visitem) is list:
            for ix in range(0, len(visitem)):
                subitem = visitem[ix]
                if hasattr(subitem, "uservisname"):
                    subname = subitem.uservisname + "_%d" % (ix)
                else:
                    subname = name + "_%d" % (ix)
                subitem = pg.TreeWidgetItem([subname])
                item.addChild(subitem)
                self.user_item_tree.setItemWidget(
                    subitem, 1, self.user_subitem_cbxs[name][ix])
Пример #3
0
    def populate(self, experiments=None):
        self.items_by_pair_id = {}
        
        self.session = db.session()
        
        if experiments is None:
            experiments = db.list_experiments(session=self.session)
            # preload all cells,pairs so they are not queried individually later on
            pairs = self.session.query(db.Pair, db.Experiment, db.Cell, db.Slice).join(db.Experiment, db.Pair.experiment_id==db.Experiment.id).join(db.Cell, db.Cell.id==db.Pair.pre_cell_id).join(db.Slice).all()
        
        experiments.sort(key=lambda e: e.acq_timestamp)
        for expt in experiments:
            date = expt.acq_timestamp
            date_str = datetime.fromtimestamp(date).strftime('%Y-%m-%d')
            slice = expt.slice
            expt_item = pg.TreeWidgetItem(map(str, [date_str, '%0.3f'%expt.acq_timestamp, expt.rig_name, slice.species, expt.project_name, expt.target_region, slice.genotype, expt.acsf]))
            expt_item.expt = expt
            self.addTopLevelItem(expt_item)

            for pair in expt.pair_list:
                # if pair.n_ex_test_spikes == 0 and pair.n_in_test_spikes == 0:
                #     continue
                cells = '%s => %s' % (pair.pre_cell.ext_id, pair.post_cell.ext_id)
                conn = {True:"syn", False:"-", None:"?"}[pair.has_synapse]
                types = 'L%s %s => L%s %s' % (pair.pre_cell.target_layer or "?", pair.pre_cell.cre_type, pair.post_cell.target_layer or "?", pair.post_cell.cre_type)
                pair_item = pg.TreeWidgetItem([cells, conn, types])
                expt_item.addChild(pair_item)
                pair_item.pair = pair
                pair_item.expt = expt
                self.items_by_pair_id[pair.id] = pair_item
                # also allow select by ext id
                self.items_by_pair_id[(expt.acq_timestamp, pair.pre_cell.ext_id, pair.post_cell.ext_id)] = pair_item
                
        self.verticalScrollBar().setValue(self.verticalScrollBar().maximum())
Пример #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)
Пример #5
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)
Пример #6
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)
Пример #7
0
 def addChild(self, parent, column, title, data):
     #item = QtGui.QTreeWidgetItem(parent, [title])
     item = pg.TreeWidgetItem(parent, [title])
     self.solid_checkboxes[title] = item
     item.setData(column, QtCore.Qt.UserRole, data)
     item.setCheckState(column, QtCore.Qt.Checked)
     return item
Пример #8
0
 def __init__(self, name=None, items=None, colors=None):
     super(CParameterTree, self).__init__()
     self.name = name
     self.setColumnCount(4)
     self.setHeaderHidden(True)
     self.setDragEnabled(False)
     self.header = pg.TreeWidgetItem([name])
     self.setIndentation(0)
     headerBackgroundColor = pg.mkBrush(color=(100, 100, 100))
     fontcolor = pg.mkBrush(color=(255, 255, 255))
     self.setupHeader()
     # self.header.setBackground(0,headerBackgroundColor)
     # self.header.setBackground(1,headerBackgroundColor)
     # self.header.setBackground(2,headerBackgroundColor)
     # self.header.setBackground(3,headerBackgroundColor)
     # self.header.setForeground(0,fontcolor)
     # self.addTopLevelItem(self.header)
     # self.header.setSizeHint(0,QtCore.QSize(-1, 25))
     # self.setColumnWidth (0, 100)
     # self.setColumnWidth (1, 50)
     # self.setColumnWidth (2, 70)
     self.setColumnWidth(3, 5)
     if items is not None: self.names = items
     else: self.names = []
     self.items = {}  # main widgets
     self.colors = {}  # color widgets
     self.boxes = {}  # checkbox widgets
     self.groups = {}  # just empty items
     if items: self.addItems(items, colors)
Пример #9
0
    def poller_update(self, rec):
        ts = rec['timestamp']
        if ts in self.records:
            item = self.records[ts]['item']
            self.records[ts].update(rec)
        else:
            item = pg.TreeWidgetItem()
            self.expt_tree.addTopLevelItem(item)
            rec['item'] = item
            self.records[ts] = rec
            item.expt = rec['expt']

        for field, val in rec.items():
            try:
                i = self.fields.index(field)
            except ValueError:
                continue
            if isinstance(val, tuple):
                val, color = val
            else:
                color = None
                if val is True:
                    color = pass_color
                elif val in (False, 'ERROR'):
                    color = fail_color

            item.setText(i, str(val))
            if color is not None:
                item.setBackgroundColor(i, pg.mkColor(color))
Пример #10
0
 def addEnvelope(self,etype='Coulomb',name='Env'):
     item = pg.TreeWidgetItem([name])
     self.envelopes.addChild(item)
     self.eNames.append(name)
     self.eTypes[name] = etype
     typeLabel = QtGui.QLabel(etype)
     item.setWidget(2,typeLabel)
     colorButton = ColorButton()
     self.eCButtons[name] = colorButton
     color = get_color()
     colorButton.setColor(color)
     item.setExpanded(True)
     self.eBoxes[name] = {}
     colorItem = pg.TreeWidgetItem(['Color'])
     if etype == 'Coulomb':
         item1 = pg.TreeWidgetItem(['Friction Angle'])
         item2 = pg.TreeWidgetItem(['Cohesion'])
         step1 = 1
         step2 = 50
     elif etype == 'Brown':
         item1 = pg.TreeWidgetItem(['m'])
         item2 = pg.TreeWidgetItem(['UCS'])
         step1 = 1
         step2 = 1
     else:
         print etype
         return 0
     item.addChild(colorItem)
     item.addChild(item1)
     item.addChild(item2)
     frictionBox = pg.SpinBox(value=50, step=step1)
     cohesionBox = pg.SpinBox(value=1e3, step=step2)
     frictionBox.sigValueChanged.connect(self.plot)
     cohesionBox.sigValueChanged.connect(self.plot)
     colorItem.setWidget(2,colorButton)
     item1.setWidget(2,frictionBox)
     item2.setWidget(2,cohesionBox)
     self.fBoxes[name] = frictionBox
     self.cBoxes[name] = cohesionBox
     for dname in self.dNames:
         child = pg.TreeWidgetItem([dname])
         item.addChild(child)
         box = CheckBox()
         child.setWidget(2,box)
         self.eBoxes[name][dname] = box
         box.click()
         box.clicked.connect(lambda:self.getEnvelope(name))
     removeEnvelopeItem = pg.TreeWidgetItem([''])
     item.addChild(removeEnvelopeItem)
     removeButton = QtGui.QPushButton('Remove')
     removeEnvelopeItem.setWidget(2,removeButton)
     removeButton.clicked.connect(lambda:self.removeEnvelope(item))
     colorButton.sigColorChanged.connect(self.plot)
     self.nEnvelopes += 1
     self.getEnvelope(eName=name)
Пример #11
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)
Пример #12
0
 def __init__(self, recipe):
     self.recipe = recipe
     pg.TreeWidgetItem.__init__(self, [recipe.solution.name])
     self.textItem = pg.TreeWidgetItem()
     self.addChild(self.textItem)
     self.editor = RichTextEdit()
     self.textItem.setWidget(0, self.editor)
     if recipe.notes is not None:
         self.editor.setHtml(recipe.notes)
     self.editor.textChanged.connect(self.textChanged)
Пример #13
0
    def addItem(self):
        name = 'Item_%d' % (self.nmax)
        self.names.append(name)
        item = pg.TreeWidgetItem([name])
        # self.tree.addTopLevelItem(item)
        # self.tree.insertTopLevelItem(2+self.nItems,item)
        self.items.addChild(item)
        self.items.setExpanded(True)
        self.nItems += 1
        self.nmax += 1
        colorButton = ColorButton()
        self.colorButtons[name] = colorButton
        item.setWidget(1, colorButton)
        color = get_color()
        colorButton.setColor(color)
        xitem = pg.TreeWidgetItem(['x'])
        yitem = pg.TreeWidgetItem(['y'])
        xline = QtGui.QLineEdit()
        yline = QtGui.QLineEdit()
        xline.setPlaceholderText('Enter expression')
        yline.setPlaceholderText('Enter expression')
        self.xTextBoxes[name] = xline
        self.yTextBoxes[name] = yline
        self.xTexts[name] = ''
        self.yTexts[name] = ''
        self.plotItems[name] = {}
        xitem.setWidget(1, xline)
        yitem.setWidget(1, yline)
        item.addChild(xitem)
        item.addChild(yitem)
        item.setExpanded(True)
        buttonItem = pg.TreeWidgetItem()
        removeButton = QtGui.QPushButton('Remove')
        self.removeButtons[name] = removeButton
        buttonItem.setWidget(1, removeButton)
        item.addChild(buttonItem)

        removeButton.pressed.connect(self.removeItem)
        colorButton.sigColorChanged.connect(self.plot)
Пример #14
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)
Пример #15
0
    def poller_update(self, rec):
        ts = rec['timestamp']
        if ts in self.records:
            item = self.records[ts]['item']
            self.records[ts].update(rec)
        else:
            item = pg.TreeWidgetItem()
            self.expt_tree.addTopLevelItem(item)
            rec['item'] = item
            self.records[ts] = rec

        for i, field in enumerate(
            ['timestamp', 'rig', 'has_metadata_qc', 'has_site_mosaic']):
            item.setText(i, str(rec[field]))
Пример #16
0
    def addLayer(self, layer):
        if isinstance(layer, PixelLayerBase):
            nPixelLayersPost = self.nPixelLayers()
            self.pixelLayers[layer.name()] = layer
            if (nPixelLayersPost == 0):
                self.treeWidget.addTopLevelItem(self.pixelLayersItem)

            layerItem = pg.TreeWidgetItem([''])
            self.pixelLayersItem.addChild(layerItem)

            ctrlWidget = layer.makeCtrlWidget()
            layerItem.setWidget(0, ctrlWidget)

        else:
            raise RuntimeError("Not yet implemented")
Пример #17
0
 def setupHeader(self):
     self.header = pg.TreeWidgetItem([self.name])
     self.setIndentation(0)
     headerBackgroundColor = pg.mkBrush(color=(100, 100, 100))
     fontcolor = pg.mkBrush(color=(255, 255, 255))
     self.header.setBackground(0, headerBackgroundColor)
     self.header.setBackground(1, headerBackgroundColor)
     self.header.setBackground(2, headerBackgroundColor)
     self.header.setBackground(3, headerBackgroundColor)
     self.header.setForeground(0, fontcolor)
     self.addTopLevelItem(self.header)
     self.header.setSizeHint(0, QtCore.QSize(-1, 25))
     self.setColumnWidth(0, 100)
     self.setColumnWidth(1, 50)
     self.setColumnWidth(2, 70)
Пример #18
0
    def __init__(self, hdf):
        self.hdf = hdf

        name = hdf.name
        parent = hdf.parent
        if parent is not hdf:
            name = name[len(parent.name.rstrip('/')) + 1:]

        pg.TreeWidgetItem.__init__(self, [name])
        if isinstance(hdf, h5py.Group) and len(self.hdf.keys()) > 0:
            self._loading_item = pg.TreeWidgetItem(["loading.."])
            self.addChild(self._loading_item)
            self._children_loaded = False
        else:
            self._loading_item = None
            self._children_loaded = True
Пример #19
0
 def addData(self, s1, s3, name=None):
     if name is None:
         name = 'Untitled_%d' % (self.nData)
     self.s1 = np.append(self.s1, s1)
     self.s3 = np.append(self.s3, s3)
     item = pg.TreeWidgetItem([name])
     self.datasets.append(name)
     self.fpoints.addChild(item)
     # self.tree.addTopLevelItem(item)
     color = (0, 0, 0)
     colorButton = ColorButton.ColorButton()
     item.setWidget(2, colorButton)
     self.dCButtons[name] = colorButton
     colorButton.setColor(color)
     colorButton.sigColorChanged.connect(self.plot)
     self.nData += 1
Пример #20
0
 def addItems(self, items, colors=None, group=None, indent=5):
     '''
     items - list of names
     colors - list of colors (can be None)
     group - name of the group. if None, items ain't grouped
     '''
     print('Setting up tree')
     if group:
         subheader = pg.TreeWidgetItem([' ' + group])
         self.header.addChild(subheader)
         self.groups[group] = {
             'items': {},
             'boxes': {},
             'colors': {},
         }
     k = 0
     for item in sorted(items):
         child = GroupedTreeItem([item])
         # print(item)
         child.setGroup(group)
         self.items[item] = child
         if group:
             self.groups[group]['items'][item] = child
         self.header.addChild(child)
         # box = QtGui.QCheckBox()
         box = CheckBox()
         box.setName(item)
         # colorButton = pg.ColorButton()
         colorButton = ColorButton()
         self.colors[item] = colorButton
         self.boxes[item] = box
         if group:
             self.groups[group]['boxes'][item] = box
             self.groups[group]['colors'][item] = colorButton
         self.names.append(item)
         child.setWidget(1, box)
         child.setWidget(2, colorButton)
         child.setText(0, ' ' * indent + item)
         # print colorButton.color()
         if colors:
             if k < len(colors):
                 colorButton.setColor(colors[k])
         k += 1
         colorButton.sigColorChanged.connect(self.emitStateChangedSignal)
         box.stateChanged.connect(self.emitStateChangedSignal)
         self.header.setExpanded(True)
Пример #21
0
 def addItem(self, name, xdata, ydata):
     item = pg.TreeWidgetItem([name])
     self.names.append(name)
     self.items[name] = item
     self.tree.addTopLevelItem(item)
     # self.insertTopLevelItem(self.nitems,item)
     color = (rand() * 230, rand() * 230, rand() * 230)
     colorButton = ColorButton()
     self.colorButtons[name] = colorButton
     colorButton.setColor(color)
     removeButton = QtGui.QPushButton("Remove", self)
     self.removeButtons[name] = removeButton
     item.setWidget(1, colorButton)
     item.setWidget(2, removeButton)
     removeButton.clicked.connect(self.removeItem)
     self.xData[name] = xdata
     self.yData[name] = ydata
Пример #22
0
    def loadhistory(self, file_name):
        '''
        载入历史记录
        :param file_name: 指定导入的文件名称
        '''

        # 清除现有操作记录
        self.clear()
        # 读取指定名称的操作记录文件至【操作记录】的UI界面
        self.record_name = file_name
        with open(file_name, 'r') as f:
            for cmd_line in f.readlines():
                cmd_line = cmd_line.strip('\n')
                cmd = cmd_line.split(' ')
                cmd_name = cmd[0]
                commanditem = pg.TreeWidgetItem([cmd[1], cmd[2]])
                self.cmdlist.addTopLevelItem(commanditem)
        # 更新界面
        self.update()
Пример #23
0
 def execute(self, cmd_name, foot_v, last_v, param=None):
     '''
     执行操作:
     1.判断redo栈是否存在操作记录,若有则删除
     2.拷贝被执行对象(不可直接用=赋值,这样执行前后的对象会指向同一地址)
     3.undo栈push:[执行操作名,操作记录,被执行对象]
     4.【操作记录】管理器UI添加操作记录
     :param cmd_name: 执行的操作记录名称
     :param obj: 被执行操作的对象(被执行对象)
     '''
     if self.redostack:
         self.redostack.clear()
     if cmd_name == 'trim_foot':
         self.opts[cmd_name][1] = '向{}平移{:.2f}mm'.format(
             self.trim_foot_param[param[0]], param[1])
     f = copy.copy(foot_v)
     l = copy.copy(last_v)
     last_obj = [f, l]  # 可改进
     commanditem = pg.TreeWidgetItem(
         [self.opts[cmd_name][0], self.opts[cmd_name][1]])
     self.undostack.append((cmd_name, commanditem, last_obj))
     self.cmdlist.addTopLevelItem(commanditem)
Пример #24
0
    def __init__(self, etype='Coulomb', name='Env', parent=None):
        self.parent = parent
        self.typeLabel = QtGui.QLabel(etype)
        self.treeItem = pg.TreeWidgetItem([name])
        self.treeItem.setWidget(2, self.typeLabel)
        self.colorButton = ColorButton.ColorButton()
        color = get_color()
        self.colorButton.setColor(color)
        self.treeItem.setExpanded(True)
        self.colorItem = pg.TreeWidgetItem(['Color'])

        if etype == 'Coulomb':
            item1 = pg.TreeWidgetItem(['Friction Angle'])
            item2 = pg.TreeWidgetItem(['Cohesion'])
            step1 = 1
            step2 = 50
        elif etype == 'Brown':
            item1 = pg.TreeWidgetItem(['m'])
            item2 = pg.TreeWidgetItem(['UCS'])
            step1 = 1
            step2 = 1
        else:
            logger.error("Envelope type unknows: %s" % (etype))
            # raise NotImplementedError("Envelope type unknows: %s"%(etype))
            return 0

        self.treeItem.addChild(self.colorItem)
        self.treeItem.addChild(item1)
        self.treeItem.addChild(item2)
        self.frictionBox = pg.SpinBox(value=50, step=step1)
        self.cohesionBox = pg.SpinBox(value=1e3, step=step2)

        self.colorItem.setWidget(2, self.colorButton)
        item1.setWidget(2, self.frictionBox)
        item2.setWidget(2, self.cohesionBox)
        self.removeItem = pg.TreeWidgetItem([''])
        self.treeItem.addChild(self.removeItem)
        self.removeButton = QtGui.QPushButton('Remove')
        self.removeItem.setWidget(2, self.removeButton)
Пример #25
0
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)

w.addTopLevelItem(i1)
w.addTopLevelItem(i2)
w.addTopLevelItem(i3)
w.addTopLevelItem(i4)
w.addTopLevelItem(i5)
i1.addChild(i11)
i1.addChild(i12)
Пример #26
0
    def populate(self, experiments=None, all_pairs=False, synapses=False):
        """Populate the browser with a list of experiments.
        
        Parameters
        ----------
        experiments : list | None
            A list of Experiment instances. If None, then automatically query experiments from the default database.
        all_pairs : bool
            If False, then pairs with no qc-passed pulse responses are excluded
        synapses : bool
            If True, then only synaptically connected pairs are shown
        """
        with pg.BusyCursor():
            # if all_pairs is set to True, all pairs from an experiment will be included regardless of whether they have data
            self.items_by_pair_id = {}
            
            self.session = db.session()
            
            if experiments is None:
                # preload all cells,pairs so they are not queried individually later on
                q = self.session.query(db.Pair, db.Experiment, db.Cell, db.Slice)
                q = q.join(db.Experiment, db.Pair.experiment_id==db.Experiment.id)
                q = q.join(db.Cell, db.Cell.id==db.Pair.pre_cell_id)
                q = q.join(db.Slice)
                if synapses:
                    q = q.filter(db.Pair.has_synapse==True)
                    
                recs = q.all()
                experiments = list(set([rec.Experiment for rec in recs]))
            
            experiments.sort(key=lambda e: e.acq_timestamp)
            for expt in experiments:
                date = expt.acq_timestamp
                date_str = datetime.fromtimestamp(date).strftime('%Y-%m-%d')
                slice = expt.slice
                expt_item = pg.TreeWidgetItem(map(str, [date_str, '%0.3f'%expt.acq_timestamp, expt.rig_name, slice.species, expt.project_name, expt.target_region, slice.genotype, expt.acsf]))
                expt_item.expt = expt
                self.addTopLevelItem(expt_item)

                for pair in expt.pair_list:
                    if all_pairs is False and pair.n_ex_test_spikes == 0 and pair.n_in_test_spikes == 0:
                        continue
                    if synapses and not pair.has_synapse:
                        continue
                    cells = '%s => %s' % (pair.pre_cell.ext_id, pair.post_cell.ext_id)
                    conn = {True:"syn", False:"-", None:"?"}[pair.has_synapse]
                    gap = {True:"gap", False:"-", None:"?"}[pair.has_electrical]
                    pre_type = pair.pre_cell.cre_type
                    if pre_type == 'unknown':
                        dendrite_type = pair.pre_cell.morphology.dendrite_type if pair.pre_cell.morphology is not None else None
                        pre_type = dendrite_type if dendrite_type in ['spiny', 'aspiny', 'sparsely spiny'] else pre_type
                    post_type = pair.post_cell.cre_type
                    if post_type == 'unknown':
                        dendrite_type = pair.post_cell.morphology.dendrite_type if pair.pre_cell.morphology is not None else None
                        post_type = dendrite_type if dendrite_type in ['spiny', 'aspiny', 'sparsely spiny'] else post_type
                    types = 'L%s %s => L%s %s' % (pair.pre_cell.target_layer or "?", pre_type, pair.post_cell.target_layer or "?", post_type)
                    pair_item = pg.TreeWidgetItem([cells, conn+' ; '+gap, types])
                    expt_item.addChild(pair_item)
                    pair_item.pair = pair
                    pair_item.expt = expt
                    self.items_by_pair_id[pair.id] = pair_item
                    # also allow select by ext id
                    self.items_by_pair_id[(expt.acq_timestamp, pair.pre_cell.ext_id, pair.post_cell.ext_id)] = pair_item
                    
            self.verticalScrollBar().setValue(self.verticalScrollBar().maximum())
Пример #27
0
    def handle_checker_record(self, rec):
        expt = rec['experiment']
        if expt in self.records_by_expt:
            # use old record / item
            index = self.records_by_expt[expt]
            item = self.records[index]['item']
        else:
            # add new record / item
            item = pg.TreeWidgetItem()
            self.expt_tree.addTopLevelItem(item)
            rec['item'] = item
            index = self.records.add_record({})
            item.index = index

        record = self.records[index]
        record['item'] = item
        self.records_by_expt[expt] = index

        # update item/record fields
        update_filter = False
        for field, val in rec.items():
            if field in self.field_indices and isinstance(val, tuple):
                # if a tuple was given, interpret it as (text, color)
                val, color = val
            else:
                # otherwise make a guess on a good color
                color = 'w'
                if val is True:
                    color = pass_color
                elif val is False:
                    color = fail_color
                elif val in ('ERROR', 'MISSING', 'FAILED'):
                    color = fail_color
                elif val == '-':
                    # dash means item is incomplete but still acceptable
                    color = [c * 0.5 + 128 for c in pass_color]
            
            display_val = str(val)

            if field == 'timestamp' and rec.get('error') is not None:
                color = fail_color

            # update this field in the record
            record[field] = val
            
            # update this field in the tree item
            try:
                i = self.field_indices[field]
            except KeyError:
                continue

            item.setText(i, display_val)
            if color is not None:
                item.setBackgroundColor(i, pg.mkColor(color))

            # update filter fields
            filter_field = self.filter_fields.get(field)
            if filter_field is not None and filter_field['mode'] == 'enum' and display_val not in filter_field['values']:
                filter_field['values'][display_val] = True
                update_filter = True

        if update_filter:
            self.filter.setFields(self.filter_fields)

        self.filter_items(self.records[index:index+1])
Пример #28
0
    def addEnvelope(self, etype='Coulomb', name='Env'):
        logger.info("Adding %s failure envelope: name %s" % (etype, name))
        # envelope_item = EnvelopeEntry(etype, name, parent=self)
        # self.tree.addTopLevelItem(envelope_item.treeItem)
        # envelope_item.colorButton.sigColorChanged.connect(self.plot)
        # envelope_item.frictionBox.sigValueChanged.connect(self.plot)
        # envelope_item.cohesionBox.sigValueChanged.connect(self.plot)
        item = pg.TreeWidgetItem([name])
        self.envelopes.addChild(item)
        self.eNames.append(name)
        self.eTypes[name] = etype
        typeLabel = QtGui.QLabel(etype)
        item.setWidget(2, typeLabel)
        colorButton = ColorButton.ColorButton()
        self.eCButtons[name] = colorButton
        color = get_color()
        colorButton.setColor(color)
        item.setExpanded(True)
        self.eBoxes[name] = {}
        colorItem = pg.TreeWidgetItem(['Color'])

        if etype == 'Coulomb':
            item1 = pg.TreeWidgetItem(['Friction Angle'])
            item2 = pg.TreeWidgetItem(['Cohesion'])
            step1 = 1
            step2 = 50
        elif etype == 'Brown':
            item1 = pg.TreeWidgetItem(['m'])
            item2 = pg.TreeWidgetItem(['UCS'])
            step1 = 1
            step2 = 1
        else:
            logger.error("Envelope type unknows: %s" % (etype))
            # raise NotImplementedError("Envelope type unknows: %s"%(etype))
            return 0

        item.addChild(colorItem)
        item.addChild(item1)
        item.addChild(item2)
        frictionBox = pg.SpinBox(value=50, step=step1)
        cohesionBox = pg.SpinBox(value=1e3, step=step2)
        frictionBox.sigValueChanged.connect(self.plot)
        cohesionBox.sigValueChanged.connect(self.plot)
        colorItem.setWidget(2, colorButton)
        item1.setWidget(2, frictionBox)
        item2.setWidget(2, cohesionBox)
        self.fBoxes[name] = frictionBox
        self.cBoxes[name] = cohesionBox
        for dname in self.datasets:
            child = pg.TreeWidgetItem([dname])
            item.addChild(child)
            box = CheckBox.CheckBox()
            child.setWidget(2, box)
            self.eBoxes[name][dname] = box
            box.click()
            box.clicked.connect(lambda: self.getEnvelope(name))

        removeEnvelopeItem = pg.TreeWidgetItem([''])
        item.addChild(removeEnvelopeItem)
        removeButton = QtGui.QPushButton('Remove')
        removeEnvelopeItem.setWidget(2, removeButton)
        removeButton.clicked.connect(lambda: self.removeEnvelope(item))
        colorButton.sigColorChanged.connect(self.plot)
        self.nEnvelopes += 1
        self.getEnvelope(eName=name)