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()
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)
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)
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)
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)
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)
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()
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')
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_()
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)
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()
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)
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)
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)
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)
# -*- 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)
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)
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()
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'])
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)
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)