本文整理汇总了Python中pyqtgraph.dockarea.DockArea.addDock方法的典型用法代码示例。如果您正苦于以下问题:Python DockArea.addDock方法的具体用法?Python DockArea.addDock怎么用?Python DockArea.addDock使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pyqtgraph.dockarea.DockArea
的用法示例。
在下文中一共展示了DockArea.addDock方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: setup_widgets
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
def setup_widgets(self, parent, name):
dock_area = DockArea()
parent.addTab(dock_area, name)
dock_position = Dock("Position")
dock_area.addDock(dock_position)
# Position 2d plot
position_graphics = pg.GraphicsLayoutWidget()
position_graphics.show()
view = position_graphics.addViewBox()
self.position_img = pg.ImageItem(border='w')
view.addItem(self.position_img)
dock_position.addWidget(position_graphics)
# Status widget
dock_status = Dock("Status", size=(800, 1))
dock_area.addDock(dock_status, 'top')
cw = QtGui.QWidget()
cw.setStyleSheet("QWidget {background-color:white}")
layout = QtGui.QGridLayout()
cw.setLayout(layout)
self.spin_box = Qt.QSpinBox(value=1)
self.spin_box.setMaximum(10)
self.spin_box.setSuffix(" Threshold")
layout.addWidget(self.spin_box, 0, 6, 0, 1)
dock_status.addWidget(cw)
self.spin_box.valueChanged.connect(lambda value: self.send_command(str(value)))
示例2: MainWindow
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
class MainWindow(QMainWindow, Ui_MainWindow):
"""The only window of the application."""
def __init__(self, settings):
super(MainWindow, self).__init__()
self.settings = settings
self.setupUi(self)
self.dock_area = DockArea()
self.setCentralWidget(self.dock_area)
self.createDocks()
self.loadSettings()
def createDocks(self):
self.zmq_subscriber = ZMQSubscriber(self.settings, self)
self.zmq_subscriber_dock = Dock('Subscriber',
widget=self.zmq_subscriber)
self.dock_area.addDock(self.zmq_subscriber_dock)
def loadSettings(self):
"""Load window state from self.settings"""
self.settings.beginGroup('mainwindow')
geometry = self.settings.value('geometry').toByteArray()
state = self.settings.value('windowstate').toByteArray()
dock_string = str(self.settings.value('dockstate').toString())
if dock_string is not "":
dock_state = eval(dock_string)
self.dock_area.restoreState(dock_state)
self.settings.endGroup()
self.restoreGeometry(geometry)
self.restoreState(state)
def saveSettings(self):
"""Save window state to self.settings."""
self.settings.beginGroup('mainwindow')
self.settings.setValue('geometry', self.saveGeometry())
self.settings.setValue('windowstate', self.saveState())
dock_state = self.dock_area.saveState()
# dock_state returned here is a python dictionary. Coundn't find a good
# way to save dicts in QSettings, hence just using representation
# of it.
self.settings.setValue('dockstate', repr(dock_state))
self.settings.endGroup()
def closeEvent(self, event):
self.zmq_subscriber.saveSettings()
self.saveSettings()
示例3: setup_plots
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
def setup_plots(self, parent, name):
dock_area = DockArea()
parent.addTab(dock_area, name)
dock_position = Dock("Position Correlation")
dock_area.addDock(dock_position)
# Position 2d plot
position_graphics = pg.GraphicsLayoutWidget()
position_graphics.show()
view = position_graphics.addViewBox()
self.position_img = pg.ImageItem(border='w')
view.addItem(self.position_img)
dock_position.addWidget(position_graphics)
示例4: initDialog
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
def initDialog(self,results=None,KData=None,bDrawText=False):
# 1) creates layouts
dialog = QtGui.QDialog()
mainLayout = QtGui.QHBoxLayout()
rightLayout = QtGui.QVBoxLayout()
mainLayout.addLayout(rightLayout)
dialog.setLayout(mainLayout)
dialog.setWindowTitle(('Strategy Results'))
# 2) creates widgets
from Widgets.pgCandleWidgetCross import pgCandleWidgetCross
from Widgets.pgCrossAddition import pgCrossAddition
from pyqtgraph.dockarea import DockArea,Dock
area = DockArea()
## Create docks, place them into the window one at a time.
## Note that size arguments are only a suggestion; docks will still have to
## fill the entire dock area and obey the limits of their internal widgets.
d1 = Dock("price", size=(200,100))
d2 = Dock("position", size=(200,100))
area.addDock(d1, 'bottom')
area.addDock(d2, 'bottom')
rightLayout.addWidget(area)
pgCandleView = pgCandleWidgetCross(dataForCandle=KData)
PyqtGraphindicators = pgCrossAddition()
toShow = pgCandleView
self.pricePlot(toShow)
d1.addWidget(toShow)
PyqtGraphPosition = pgCrossAddition()
self.positionPlot(PyqtGraphPosition)
d2.addWidget(PyqtGraphPosition)
PyqtGraphPosition.showGrid(x=True, y=True)
PyqtGraphPosition.setXLink(toShow)
return dialog
示例5: setup_status_widget
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
def setup_status_widget(self, parent): # Visualizes the nodes + their connections + CPU usage
# Status dock area showing setup
dock_area = DockArea()
parent.addTab(dock_area, 'Status')
self.status_dock = Dock("Status")
dock_area.addDock(self.status_dock)
# GraphicsLayout to align graphics
status_graphics_widget = pg.GraphicsLayoutWidget()
status_graphics_widget.show()
self.status_dock.addWidget(status_graphics_widget)
try:
self.configuration['receiver']
except KeyError:
return
# Create nodes with links from configuration file for converter/receiver
for receiver_index, (receiver_name, receiver_settings) in enumerate(self.configuration['receiver'].items()):
# Add receiver info
view = status_graphics_widget.addViewBox(row=receiver_index, col=5, lockAspect=True, enableMouse=False)
text = pg.TextItem('Receiver\n%s' % receiver_name, border='b', fill=(0, 0, 255, 100), anchor=(0.5, 0.5), color=(0, 0, 0, 200))
text.setPos(0.5, 0.5)
view.addItem(text)
# Add corresponding producer info
try:
if self.configuration['converter']:
try:
actual_converter = self.configuration['converter'][receiver_name]
view = status_graphics_widget.addViewBox(row=receiver_index, col=1, lockAspect=True, enableMouse=False)
text = pg.TextItem('Producer\n%s' % receiver_name, border='b', fill=(0, 0, 255, 100), anchor=(0.5, 0.5), color=(0, 0, 0, 200))
text.setPos(0.5, 0.5)
view.addItem(text)
view = status_graphics_widget.addViewBox(row=receiver_index, col=3, lockAspect=True, enableMouse=False)
text = pg.TextItem('Converter\n%s' % receiver_settings, border='b', fill=(0, 0, 255, 100), anchor=(0.5, 0.5), color=(0, 0, 0, 200))
text.setPos(0.5, 0.5)
view.addItem(text)
except KeyError: # no converter for receiver
pass
except KeyError: # No converter defined in configruation
pass
示例6: layout
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
def layout(self):
area = DockArea()
self.win.setCentralWidget(area)
self.win.resize(2000,1900)
self.win.setWindowTitle(self.title)
docks=[]
docks.append(Dock("Parameters", size=(500,1000)))
docks.append(Dock("Voltage", size=(1000,250)))
docks.append(Dock("Recovery current", size=(1000,250)))
docks.append(Dock("Phase plane", size=(1000,500)))
docks.append(Dock("Test set", size=(500,1000)))
docks.append(Dock("Analysis", size=(500,350)))
area.addDock(docks[4], 'left') ## place d1 at left edge of dock area (it will fill the whole space since there are no other docks yet)
area.addDock(docks[0], 'right',docks[4])
area.addDock(docks[1], 'right')
area.addDock(docks[2], 'bottom',docks[1])
area.addDock(docks[3], 'bottom',docks[2])
area.addDock(docks[5], 'bottom',docks[0])
for d,w in zip(docks, self.obj.widgets):
d.addWidget(w)
示例7: initDialogSummary
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
def initDialogSummary(self,result,KData=None):
# 1) creates layouts
dialog = QtGui.QDialog()
mainLayout = QtGui.QHBoxLayout()
rightLayout = QtGui.QVBoxLayout()
mainLayout.addLayout(rightLayout)
dialog.setLayout(mainLayout)
dialog.setWindowTitle(('Strategy Results'))
import os,sys
xpower = os.path.abspath(os.path.join(os.path.dirname(__file__),os.pardir,os.pardir,os.pardir,'midProjects','histdataUI'))
sys.path.append(xpower)
from Widgets.pgCandleWidgetCross import pgCandleWidgetCross
from Widgets.pgCrossAddition import pgCrossAddition
from pyqtgraph.dockarea import DockArea,Dock
area = DockArea()
rightLayout.addWidget(area)
# 2) creates widgets
# 2.1)candle
pgCandleView = pgCandleWidgetCross(dataForCandle=KData)
dCandle = Dock("candles",closable=True, size=(200,300)) ## give this dock the minimum possible size
area.addDock(dCandle, 'bottom')
dCandle.addWidget(pgCandleView)
# 2) creates widgets
# 2.3)position_cost
if(True):
PyqtGraphPositionCost = pgCrossAddition()
self.availableCashPlot(PyqtGraphPositionCost)
dAvailableCash = Dock("available_cash",closable=True, size=(200,100))
area.addDock(dAvailableCash, 'bottom')
dAvailableCash.addWidget(PyqtGraphPositionCost)
PyqtGraphPositionCost.setXLink(pgCandleView)
# 2.3)position_cost
if(True):
PyqtGraphPositionCost = pgCrossAddition()
self.portfolioPlot(PyqtGraphPositionCost)
dPortfolioValue = Dock("portfolio_value",closable=True, size=(200,100))
area.addDock(dPortfolioValue, 'bottom')
dPortfolioValue.addWidget(PyqtGraphPositionCost)
PyqtGraphPositionCost.setXLink(pgCandleView)
return dialog
示例8: __init__
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
def __init__(self, scanZ, recWidget=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setMinimumSize(2, 350)
self.mainRec = recWidget
self.webcam = instruments.Webcam()
self.z = scanZ
self.z.zHostPosition = 'left'
self.z.zobject.HostBackLashEnable = False
self.setPoint = 0
self.V = Q_(1, 'V')
self.um = Q_(1, 'um')
self.nm = Q_(1, 'nm')
self.setFrameStyle(QtGui.QFrame.Panel | QtGui.QFrame.Raised)
self.scansPerS = 10
self.ProcessData = ProcessData(self.webcam)
# Focus lock widgets
self.kpEdit = QtGui.QLineEdit('4')
self.kpEdit.setFixedWidth(60)
self.kpEdit.textChanged.connect(self.unlockFocus)
self.kpLabel = QtGui.QLabel('kp')
self.kiEdit = QtGui.QLineEdit('0.01')
self.kiEdit.setFixedWidth(60)
self.kiEdit.textChanged.connect(self.unlockFocus)
self.kiLabel = QtGui.QLabel('ki')
self.lockButton = QtGui.QPushButton('Lock')
self.lockButton.setCheckable(True)
self.lockButton.clicked.connect(self.toggleFocus)
self.lockButton.setSizePolicy(QtGui.QSizePolicy.Preferred,
QtGui.QSizePolicy.Expanding)
moveLabel = QtGui.QLabel('Move [nm]')
moveLabel.setAlignment(QtCore.Qt.AlignCenter)
self.moveEdit = QtGui.QLineEdit('0')
self.moveEdit.setFixedWidth(60)
self.moveEdit.returnPressed.connect(self.zMoveEdit)
self.focusDataBox = QtGui.QCheckBox('Save focus data')
self.focusPropertiesDisplay = QtGui.QLabel(' st_dev = 0 max_dev = 0')
self.graph = FocusLockGraph(self, self.mainRec)
self.focusTime = 1000 / self.scansPerS
self.focusTimer = QtCore.QTimer()
self.focusTimer.timeout.connect(self.update)
self.focusTimer.start(self.focusTime)
self.locked = False
self.n = 1
self.max_dev = 0
self.focusCalib = FocusCalibration(self)
self.focusCalibThread = QtCore.QThread(self)
self.focusCalib.moveToThread(self.focusCalibThread)
self.focusCalibButton = QtGui.QPushButton('Calibrate')
self.focusCalibButton.clicked.connect(self.focusCalib.start)
self.focusCalibThread.start()
try:
prevCal = np.around(np.loadtxt('calibration')[0]/10)
text = '1 px --> {} nm'.format(prevCal)
self.calibrationDisplay = QtGui.QLineEdit(text)
except:
self.calibrationDisplay = QtGui.QLineEdit('0 px --> 0 nm')
self.calibrationDisplay.setReadOnly(False)
self.webcamgraph = WebcamGraph(self)
dockArea = DockArea()
graphDock = Dock("Focus laser graph", size=(400, 200))
graphDock.addWidget(self.graph)
dockArea.addDock(graphDock)
webcamDock = Dock("Focus laser view", size=(200, 200))
webcamDock.addWidget(self.webcamgraph)
dockArea.addDock(webcamDock, 'right', graphDock)
# GUI layout
grid = QtGui.QGridLayout()
self.setLayout(grid)
grid.addWidget(dockArea, 0, 0, 1, 6)
grid.addWidget(self.focusCalibButton, 1, 0)
grid.addWidget(self.calibrationDisplay, 2, 0)
grid.addWidget(self.focusDataBox, 1, 1)
grid.addWidget(moveLabel, 1, 2)
grid.addWidget(self.moveEdit, 2, 2)
grid.addWidget(self.kpLabel, 1, 3)
grid.addWidget(self.kpEdit, 1, 4)
grid.addWidget(self.kiLabel, 2, 3)
grid.addWidget(self.kiEdit, 2, 4)
grid.addWidget(self.lockButton, 1, 5, 2, 1)
grid.setColumnMinimumWidth(5, 170)
示例9: InstrumentLoggingUi
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
class InstrumentLoggingUi(WidgetContainerBase, WidgetContainerForm):
levelNameList = ["debug", "info", "warning", "error", "critical"]
levelValueList = [logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR, logging.CRITICAL]
plotConfigurationChanged = QtCore.pyqtSignal( object )
def __init__(self, project, config):
super(InstrumentLoggingUi, self).__init__()
self.config = config
self.project = project
self.dockWidgetList = list()
self.plotDict = dict()
self.instrument = ""
self.loggingLevel = config.get('Settings.loggingLevel', logging.INFO)
self.consoleMaximumLines = config.get('Settings.consoleMaximumLinesNew', 100)
self.consoleEnable = config.get('Settings.consoleEnable', False)
self.printMenu = None
if self.loggingLevel not in self.levelValueList: self.loggingLevel = logging.INFO
def __enter__(self):
return self
def __exit__(self, excepttype, value, traceback):
return False
def setupUi(self, parent):
super(InstrumentLoggingUi, self).setupUi(parent)
self.dockWidgetConsole.hide()
self.loggerUi = LoggerLevelsUi(self.config)
self.loggerUi.setupUi(self.loggerUi)
self.loggerDock = QtWidgets.QDockWidget("Logging")
self.loggerDock.setWidget(self.loggerUi)
self.loggerDock.setObjectName("_LoggerDock")
self.addDockWidget( QtCore.Qt.RightDockWidgetArea, self.loggerDock)
self.loggerDock.hide()
logger = logging.getLogger()
self.toolBar.addWidget(ExceptionLogButton())
# Setup Console Dockwidget
self.levelComboBox.addItems(self.levelNameList)
self.levelComboBox.currentIndexChanged[int].connect( self.setLoggingLevel )
self.levelComboBox.setCurrentIndex( self.levelValueList.index(self.loggingLevel) )
self.consoleClearButton.clicked.connect( self.onClearConsole )
self.linesSpinBox.valueChanged.connect( self.onConsoleMaximumLinesChanged )
self.linesSpinBox.setValue( self.consoleMaximumLines )
self.checkBoxEnableConsole.stateChanged.connect( self.onEnableConsole )
self.checkBoxEnableConsole.setChecked( self.consoleEnable )
self.parent = parent
self.tabDict = SequenceDict()
self.setupPlots()
self.preferencesUi = PreferencesUi(config, self)
self.preferencesUi.setupUi(self.preferencesUi)
self.preferencesUiDock = QtWidgets.QDockWidget("Print Preferences")
self.preferencesUiDock.setWidget(self.preferencesUi)
self.preferencesUiDock.setObjectName("_preferencesUi")
self.addDockWidget( QtCore.Qt.RightDockWidgetArea, self.preferencesUiDock)
# Traceui
self.penicons = pens.penicons().penicons()
self.traceui = Traceui.Traceui(self.penicons, self.config, "Main", self.plotDict)
self.traceui.setupUi(self.traceui)
setattr(self.traceui, 'autoSaveTraces', self.config.get('autoSaveTraces', False))
self.traceui.autoSaveAction = QtWidgets.QAction('Autosave traces', self.traceui)
self.traceui.autoSaveAction.setCheckable(True)
self.traceui.autoSaveAction.setChecked(self.traceui.autoSaveTraces)
self.traceui.autoSaveAction.triggered.connect(lambda checked: setattr(self.traceui, 'autoSaveTraces', checked))
self.traceui.addAction(self.traceui.autoSaveAction)
traceuiDock = self.setupAsDockWidget(self.traceui, "Traces", QtCore.Qt.LeftDockWidgetArea)
# new fit widget
self.fitWidget = FitUi(self.traceui, self.config, "Main")
self.fitWidget.setupUi(self.fitWidget)
self.fitWidgetDock = self.setupAsDockWidget(self.fitWidget, "Fit", QtCore.Qt.LeftDockWidgetArea, stackBelow=traceuiDock)
self.instrumentLoggingHandler = InstrumentLoggingHandler(self.traceui, self.plotDict, self.config, 'externalInput')
self.ExternalParametersSelectionUi = InstrumentLoggingSelection(self.config, classdict=LoggingInstruments, plotNames=list(self.plotDict.keys()),
instrumentLoggingHandler=self.instrumentLoggingHandler )
self.ExternalParametersSelectionUi.setupUi( self.ExternalParametersSelectionUi )
self.ExternalParameterSelectionDock = QtWidgets.QDockWidget("Params Selection")
self.ExternalParameterSelectionDock.setObjectName("_ExternalParameterSelectionDock")
self.ExternalParameterSelectionDock.setWidget(self.ExternalParametersSelectionUi)
self.addDockWidget( QtCore.Qt.RightDockWidgetArea, self.ExternalParameterSelectionDock)
self.instrumentLoggingHandler.paramTreeChanged.connect( self.ExternalParametersSelectionUi.refreshParamTree)
self.instrumentLoggingHandler.setInputChannels( self.ExternalParametersSelectionUi.inputChannels() )
self.ExternalParametersSelectionUi.inputChannelsChanged.connect( self.instrumentLoggingHandler.setInputChannels )
self.instrumentLoggingDisplay = InstrumentLoggingDisplay(self.config)
self.instrumentLoggingDisplay.setupUi( self.ExternalParametersSelectionUi.inputChannels(), self.instrumentLoggingDisplay )
self.instrumentLoggingDisplayDock = QtWidgets.QDockWidget("Params Reading")
self.instrumentLoggingDisplayDock.setObjectName("_ExternalParameterDisplayDock")
self.instrumentLoggingDisplayDock.setWidget(self.instrumentLoggingDisplay)
self.addDockWidget( QtCore.Qt.RightDockWidgetArea, self.instrumentLoggingDisplayDock)
self.ExternalParametersSelectionUi.inputChannelsChanged.connect( self.instrumentLoggingDisplay.setupParameters )
self.instrumentLoggingHandler.newData.connect( self.instrumentLoggingDisplay.update )
#.........这里部分代码省略.........
示例10: OnlineMonitorApplication
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
class OnlineMonitorApplication(QtGui.QMainWindow):
def __init__(self, socket_addr):
super(OnlineMonitorApplication, self).__init__()
self.setup_plots()
self.add_widgets()
self.fps = 0
self.eps = 0 # events per second
self.total_events = 0
self.total_readouts = 0
self.last_total_events = 0
self.updateTime = ptime.time()
self.setup_data_worker_and_start(socket_addr)
self.cpu_load = max(psutil.cpu_percent(percpu=True))
def closeEvent(self, event):
super(OnlineMonitorApplication, self).closeEvent(event)
# wait for thread
self.worker.stop()
self.thread.wait(1) # fixes message: QThread: Destroyed while thread is still running
def setup_data_worker_and_start(self, socket_addr):
self.thread = QtCore.QThread() # no parent
self.worker = DataWorker() # no parent
self.worker.interpreted_data.connect(self.on_interpreted_data)
self.worker.run_start.connect(self.on_run_start)
self.worker.config_data.connect(self.on_config_data)
self.spin_box.valueChanged.connect(self.worker.on_set_integrate_readouts)
self.worker.moveToThread(self.thread)
self.worker.connect(socket_addr)
self.thread.started.connect(self.worker.process_data)
self.worker.finished.connect(self.thread.quit)
self.thread.start()
def setup_plots(self):
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
def add_widgets(self):
# Main window with dock area
self.dock_area = DockArea()
self.setCentralWidget(self.dock_area)
# Docks
dock_waveform = Dock("Waveform", size=(600, 400))
dock_histogram = Dock("Histogram", size=(600, 400))
dock_status = Dock("Status", size=(1200, 40))
self.dock_area.addDock(dock_waveform, 'left')
self.dock_area.addDock(dock_histogram, 'right', dock_waveform)
self.dock_area.addDock(dock_status, 'top')
# Status widget
cw = QtGui.QWidget()
cw.setStyleSheet("QWidget {background-color:white}")
layout = QtGui.QGridLayout()
layout.setColumnStretch(2, 1)
cw.setLayout(layout)
self.event_rate_label = QtGui.QLabel("Event Rate\n0 Hz")
self.total_events_label = QtGui.QLabel("Total Events\n0")
self.spin_box = Qt.QSpinBox(value=20, maximum=1000)
self.reset_button = Qt.QPushButton('Reset', self)
self.reset_button.clicked.connect(self.reset_plots)
layout.addWidget(self.event_rate_label, 0, 1, 1, 1)
layout.addWidget(self.total_events_label, 1, 1, 1, 1)
layout.addWidget(self.spin_box, 0, 3, 1, 1)
layout.addWidget(self.reset_button, 1, 3, 1, 1)
dock_status.addWidget(cw)
# Different plot docks
waveform_widget = pg.PlotWidget(background="w")
self.waveform_plot = waveform_widget.plot(range(0, 200), np.zeros(shape=(200)))
self.thr_line = pg.InfiniteLine(pos=1000, angle=0, pen={'color':0.0, 'style':QtCore.Qt.DashLine})
waveform_widget.addItem(self.thr_line)
dock_waveform.addWidget(waveform_widget)
histogram_widget = pg.PlotWidget(background="w")
self.histogram_plot = histogram_widget.plot(range(0, 2**14 + 1), np.zeros(shape=(2**14)), stepMode=True)
histogram_widget.showGrid(y=True)
self.thr_line_hist = pg.InfiniteLine(pos=1000, angle=90, pen={'color':0.0, 'style':QtCore.Qt.DashLine})
histogram_widget.addItem(self.thr_line_hist)
dock_histogram.addWidget(histogram_widget)
@pyqtSlot()
def on_run_start(self):
pass
@pyqtSlot(dict)
def on_config_data(self, config_data):
pass
def setup_config_text(self, conf):
pass
@pyqtSlot(dict)
def on_interpreted_data(self, interpreted_data):
self.update_plots(**interpreted_data)
def update_plots(self, waveform, bin_edges, histogram, threshold, n_actual_events):
#.........这里部分代码省略.........
示例11: setup_widgets
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
def setup_widgets(self, parent, name):
dock_area = DockArea()
parent.addTab(dock_area, name)
# Docks
dock_occcupancy = Dock("Occupancy", size=(400, 400))
dock_run_config = Dock("Run configuration", size=(400, 400))
dock_global_config = Dock("Global configuration", size=(400, 400))
dock_tot = Dock("Time over threshold values (TOT)", size=(400, 400))
dock_tdc = Dock("Time digital converter values (TDC)", size=(400, 400))
dock_event_status = Dock("Event status", size=(400, 400))
dock_trigger_status = Dock("Trigger status", size=(400, 400))
dock_service_records = Dock("Service records", size=(400, 400))
dock_hit_timing = Dock("Hit timing (rel. BCID)", size=(400, 400))
dock_status = Dock("Status", size=(800, 40))
dock_area.addDock(dock_global_config, 'left')
dock_area.addDock(dock_run_config, 'above', dock_global_config)
dock_area.addDock(dock_occcupancy, 'above', dock_run_config)
dock_area.addDock(dock_tdc, 'right', dock_occcupancy)
dock_area.addDock(dock_tot, 'above', dock_tdc)
dock_area.addDock(dock_service_records, 'bottom', dock_occcupancy)
dock_area.addDock(dock_trigger_status, 'above', dock_service_records)
dock_area.addDock(dock_event_status, 'above', dock_trigger_status)
dock_area.addDock(dock_hit_timing, 'bottom', dock_tot)
dock_area.addDock(dock_status, 'top')
# Status dock on top
cw = QtGui.QWidget()
cw.setStyleSheet("QWidget {background-color:white}")
layout = QtGui.QGridLayout()
cw.setLayout(layout)
self.rate_label = QtGui.QLabel("Readout Rate\n0 Hz")
self.hit_rate_label = QtGui.QLabel("Hit Rate\n0 Hz")
self.event_rate_label = QtGui.QLabel("Event Rate\n0 Hz")
self.timestamp_label = QtGui.QLabel("Data Timestamp\n")
self.plot_delay_label = QtGui.QLabel("Plot Delay\n")
self.scan_parameter_label = QtGui.QLabel("Scan Parameters\n")
self.spin_box = Qt.QSpinBox(value=0)
self.spin_box.setMaximum(1000000)
self.spin_box.setSuffix(" Readouts")
self.reset_button = QtGui.QPushButton('Reset')
layout.addWidget(self.timestamp_label, 0, 0, 0, 1)
layout.addWidget(self.plot_delay_label, 0, 1, 0, 1)
layout.addWidget(self.rate_label, 0, 2, 0, 1)
layout.addWidget(self.hit_rate_label, 0, 3, 0, 1)
layout.addWidget(self.event_rate_label, 0, 4, 0, 1)
layout.addWidget(self.scan_parameter_label, 0, 5, 0, 1)
layout.addWidget(self.spin_box, 0, 6, 0, 1)
layout.addWidget(self.reset_button, 0, 7, 0, 1)
dock_status.addWidget(cw)
# Connect widgets
self.reset_button.clicked.connect(lambda: self.send_command('RESET'))
self.spin_box.valueChanged.connect(lambda value: self.send_command(str(value)))
# Run config dock
self.run_conf_list_widget = Qt.QListWidget()
dock_run_config.addWidget(self.run_conf_list_widget)
# Global config dock
self.global_conf_list_widget = Qt.QListWidget()
dock_global_config.addWidget(self.global_conf_list_widget)
# Different plot docks
occupancy_graphics = pg.GraphicsLayoutWidget()
occupancy_graphics.show()
view = occupancy_graphics.addViewBox()
self.occupancy_img = pg.ImageItem(border='w')
view.addItem(self.occupancy_img)
view.setRange(QtCore.QRectF(0, 0, 80, 336))
dock_occcupancy.addWidget(occupancy_graphics)
tot_plot_widget = pg.PlotWidget(background="w")
self.tot_plot = tot_plot_widget.plot(np.linspace(-0.5, 15.5, 17), np.zeros((16)), stepMode=True)
tot_plot_widget.showGrid(y=True)
dock_tot.addWidget(tot_plot_widget)
tdc_plot_widget = pg.PlotWidget(background="w")
self.tdc_plot = tdc_plot_widget.plot(np.linspace(-0.5, 4095.5, 4097), np.zeros((4096)), stepMode=True)
tdc_plot_widget.showGrid(y=True)
tdc_plot_widget.setXRange(0, 800, update=True)
dock_tdc.addWidget(tdc_plot_widget)
event_status_widget = pg.PlotWidget()
self.event_status_plot = event_status_widget.plot(np.linspace(-0.5, 15.5, 17), np.zeros((16)), stepMode=True)
event_status_widget.showGrid(y=True)
dock_event_status.addWidget(event_status_widget)
trigger_status_widget = pg.PlotWidget()
self.trigger_status_plot = trigger_status_widget.plot(np.linspace(-0.5, 7.5, 9), np.zeros((8)), stepMode=True)
trigger_status_widget.showGrid(y=True)
dock_trigger_status.addWidget(trigger_status_widget)
service_record_widget = pg.PlotWidget()
self.service_record_plot = service_record_widget.plot(np.linspace(-0.5, 31.5, 33), np.zeros((32)), stepMode=True)
service_record_widget.showGrid(y=True)
dock_service_records.addWidget(service_record_widget)
hit_timing_widget = pg.PlotWidget()
self.hit_timing_plot = hit_timing_widget.plot(np.linspace(-0.5, 15.5, 17), np.zeros((16)), stepMode=True)
#.........这里部分代码省略.........
示例12: GUIBuilder
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
class GUIBuilder(QMainWindow):
def __init__(self, instance):
super(GUIBuilder, self).__init__()
self.setCentralWidget(QWidget())
layout = QVBoxLayout(self.centralWidget())
self.plots_layout = DockArea()
layout.addWidget(self.plots_layout)
self.form_layout = QFormLayout()
self.form_layout.setFieldGrowthPolicy(QFormLayout.ExpandingFieldsGrow)
layout.addLayout(self.form_layout)
self.buttons_layout = QHBoxLayout()
layout.addLayout(self.buttons_layout)
self.instance = instance
self.plot_widgets = {}
self.plot_data_items = {}
self.plot_color_generators = {}
seen_form_items = []
seen_plot_items = []
for node in ast.walk(ast.parse(getsource(type(instance)))):
if isinstance(node, ast.Call) and isinstance(node.func, ast.Name):
if node.func.id.startswith('gb_get_') or node.func.id.startswith('gb_set_'):
segs = node.func.id.split('_')
caster = __builtins__[segs[2]]
name = "_".join(segs[3:])
if name in seen_form_items:
continue
seen_form_items.append(name)
if caster is bool:
editor = QCheckBox()
if node.func.id.startswith('gb_get_') and node.args:
editor.setChecked(node.args[0].id == 'True')
get_fn = lambda e=editor: e.isChecked()
set_fn = lambda v, e=editor: e.setChecked(v)
else:
editor = QLineEdit()
if node.func.id.startswith('gb_get_') and node.args:
if isinstance(node.args[0], ast.Num):
init = node.args[0].n
else:
init = node.args[0].s
editor.setText(str(caster(init)))
get_fn = lambda e=editor, c=caster: c(e.text())
set_fn = lambda val, e=editor: e.setText(str(val))
base_name = "_".join(segs[2:])
get_name = "gb_get_" + base_name
set_name = "gb_set_" + base_name
__builtins__[get_name] = lambda init=0, get_fn=get_fn: get_fn()
__builtins__[set_name] = lambda val, set_fn=set_fn: set_fn(val)
self.form_layout.addRow(prettify(name), editor)
if node.func.id.startswith('gb_plot_'):
segs = node.func.id.split("_")
plot_type = segs[2]
plot_name = segs[3]
if len(segs) >= 5:
data_item_name = "_".join(segs[4:])
else:
data_item_name = ""
if (plot_name, data_item_name) in seen_plot_items:
continue
seen_plot_items.append((plot_name, data_item_name))
if plot_name not in self.plot_widgets:
if plot_type in ['y', 'xy']:
pw = PlotWidget()
self.plot_widgets[plot_name] = pw
self.plot_color_generators[plot_name] = itertools.cycle('rgb')
pw.addLegend()
else:
raise ValueError("Unknown plot type in {}: {}".format(node.func.id, plot_type))
dock = Dock(name=prettify(plot_name), widget=pw)
self.plots_layout.addDock(dock, 'above')
self.add_plot_item(node.func.id, plot_name, data_item_name)
if isinstance(node, ast.FunctionDef):
if node.name.endswith("_gb_button"):
name = "_".join(node.name.split("_")[:-2])
button = QPushButton(prettify(name))
button.clicked.connect(getattr(instance, node.name))
self.buttons_layout.addWidget(button)
def add_plot_item(self, fn_name, plot_name, data_item_name):
plot_widget = self.plot_widgets[plot_name]
color_generator = self.plot_color_generators[plot_name]
plot_type = fn_name.split("_")[2]
if plot_type == "xy":
def plot_fn(x, y):
if data_item_name in self.plot_data_items:
self.plot_data_items[data_item_name].setData(x, y)
else:
#.........这里部分代码省略.........
示例13: AWGUi
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
class AWGUi(AWGForm, AWGBase):
varDictChanged = QtCore.pyqtSignal(object)
def __init__(self, deviceClass, config, globalDict, parent=None):
AWGBase.__init__(self, parent)
AWGForm.__init__(self)
self.config = config
self.configname = 'AWGUi.' + deviceClass.displayName
self.globalDict = globalDict
self.autoSave = self.config.get(self.configname+'.autoSave', True)
self.waveformCache = OrderedDict()
self.settingsDict = self.config.get(self.configname+'.settingsDict', dict())
self.settingsName = self.config.get(self.configname+'.settingsName', '')
# self.settingsDict=dict()
# self.settingsName=''
self.recentFiles = self.config.get(self.configname+'.recentFiles', dict()) #dict of form {basename: filename}, where filename has path and basename doesn't
self.lastDir = self.config.get(self.configname+'.lastDir', getProject().configDir)
Settings.deviceProperties = deviceClass.deviceProperties
Settings.saveIfNecessary = self.saveIfNecessary
Settings.replot = self.replot
for settings in list(self.settingsDict.values()): #make sure all pickled settings are consistent with device, in case it changed
for channel in range(deviceClass.deviceProperties['numChannels']):
if channel >= len(settings.channelSettingsList): #create new channels if it's necessary
settings.channelSettingsList.append({
'segmentDataRoot':AWGSegmentNode(None),
'segmentTreeState':None,
'plotEnabled':True,
'plotStyle':Settings.plotStyles.lines})
else:
settings.channelSettingsList[channel].setdefault('segmentDataRoot', AWGSegmentNode(None))
settings.channelSettingsList[channel].setdefault('segmentTreeState', None)
settings.channelSettingsList[channel].setdefault('plotEnabled', True)
settings.channelSettingsList[channel].setdefault('plotStyle', Settings.plotStyles.lines)
self.settings = Settings() #we always run settings through the constructor
if self.settingsName in self.settingsDict:
self.settings.update(self.settingsDict[self.settingsName])
self.device = deviceClass(self.settings)
def setupUi(self, parent):
logger = logging.getLogger(__name__)
AWGForm.setupUi(self, parent)
self.setWindowTitle(self.device.displayName)
self._varAsOutputChannelDict = dict()
self.area = DockArea()
self.splitter.insertWidget(0, self.area)
self.awgChannelUiList = []
for channel in range(self.device.deviceProperties['numChannels']):
awgChannelUi = AWGChannelUi(channel, self.settings, self.globalDict, self.waveformCache, parent=self)
awgChannelUi.setupUi(awgChannelUi)
awgChannelUi.dependenciesChanged.connect(self.onDependenciesChanged)
self.awgChannelUiList.append(awgChannelUi)
dock = Dock("AWG Channel {0}".format(channel))
dock.addWidget(awgChannelUi)
self.area.addDock(dock, 'right')
self.device.waveforms[channel] = awgChannelUi.waveform
self.refreshVarDict()
# Settings control
self.saveButton.clicked.connect( self.onSave )
self.removeButton.clicked.connect( self.onRemove )
self.reloadButton.clicked.connect( self.onReload )
self.settingsModel = QtCore.QStringListModel()
self.settingsComboBox.setModel(self.settingsModel)
self.settingsModel.setStringList( sorted(self.settingsDict.keys()) )
self.settingsComboBox.setCurrentIndex( self.settingsComboBox.findText(self.settingsName) )
self.settingsComboBox.currentIndexChanged[str].connect( self.onLoad )
self.settingsComboBox.lineEdit().editingFinished.connect( self.onComboBoxEditingFinished )
self.autoSaveCheckBox.setChecked(self.autoSave)
self.saveButton.setEnabled( not self.autoSave )
self.saveButton.setVisible( not self.autoSave )
self.reloadButton.setEnabled( not self.autoSave )
self.reloadButton.setVisible( not self.autoSave )
self.autoSaveCheckBox.stateChanged.connect(self.onAutoSave)
#programming options table
self.programmingOptionsTable.setupUi(globalDict=self.globalDict, parameterDict=self.device.parameters())
self.programmingOptionsTable.valueChanged.connect( self.device.update )
# Table
self.tableModel = AWGTableModel(self.settings, self.globalDict)
self.tableView.setModel(self.tableModel)
self.tableModel.valueChanged.connect(self.onValue)
self.delegate = MagnitudeSpinBoxDelegate(self.globalDict)
self.tableView.setItemDelegateForColumn(self.tableModel.column.value, self.delegate)
#File
self.filenameModel = QtCore.QStringListModel()
self.filenameComboBox.setModel(self.filenameModel)
self.filenameModel.setStringList( [basename for basename, filename in list(self.recentFiles.items()) if os.path.exists(filename)] )
self.filenameComboBox.setCurrentIndex(self.filenameComboBox.findText(os.path.basename(self.settings.filename)))
self.filenameComboBox.currentIndexChanged[str].connect(self.onFilename)
self.removeFileButton.clicked.connect(self.onRemoveFile)
self.newFileButton.clicked.connect(self.onNewFile)
self.openFileButton.clicked.connect(self.onOpenFile)
self.saveFileButton.clicked.connect(self.onSaveFile)
self.reloadFileButton.clicked.connect(self.onReloadFile)
#cache
self.cacheDepthSpinBox.setValue(self.settings.cacheDepth)
self.cacheDepthSpinBox.valueChanged.connect(self.onCacheDepth)
#.........这里部分代码省略.........
示例14: H5Plotter
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
class H5Plotter(QtGui.QMainWindow):
def __init__(self, file):
super(H5Plotter, self).__init__()
view_box = SearchableH5View(H5File(file))
self.view = view_box.tree_view
self.match_model = self.view.model()
self.model = self.match_model.sourceModel()
self.dock_area = DockArea()
self.layout = QtGui.QSplitter(Qt.Horizontal)
self.setCentralWidget(self.layout)
self.view.activated.connect(self.load_plot)
self.layout.addWidget(view_box)
self.layout.addWidget(self.dock_area)
self.layout.setStretchFactor(0, 0)
self.layout.setStretchFactor(1, 1)
self.setWindowIcon(QtGui.QIcon("icon.ico"))
QtGui.QShortcut(QtGui.QKeySequence(Qt.CTRL | Qt.Key_N), self,
lambda: self.move_view_cursor(QtGui.QAbstractItemView.MoveDown))
QtGui.QShortcut(QtGui.QKeySequence(Qt.CTRL | Qt.Key_P), self,
lambda: self.move_view_cursor(QtGui.QAbstractItemView.MoveUp))
QtGui.QShortcut(QtGui.QKeySequence(Qt.CTRL | Qt.Key_F), self,
lambda: self.move_view_cursor(QtGui.QAbstractItemView.MoveRight))
QtGui.QShortcut(QtGui.QKeySequence(Qt.CTRL | Qt.Key_B), self,
lambda: self.move_view_cursor(QtGui.QAbstractItemView.MoveLeft))
QtGui.QShortcut(QtGui.QKeySequence(Qt.CTRL | Qt.Key_S), self, view_box.search_box.setFocus)
view_menu = self.menuBar().addMenu("View")
toggle_attrs_action = QtGui.QAction("Attributes Visible", view_menu)
toggle_attrs_action.setCheckable(True)
toggle_attrs_action.triggered.connect(self.match_model.toggle_attrs_visible)
view_menu.addAction(toggle_attrs_action)
toggle_junk_action = QtGui.QAction("Junk Visible", view_menu)
toggle_junk_action.setCheckable(True)
toggle_junk_action.triggered.connect(self.match_model.toggle_junk_visible)
view_menu.addAction(toggle_junk_action)
def move_view_cursor(self, cursor_action):
self.view.setFocus(Qt.OtherFocusReason)
self.view.setCurrentIndex(self.view.moveCursor(cursor_action, Qt.NoModifier))
def load_plot(self, index):
'given an index referring to an H5Dataset, puts a plot corresponding to that dataset in the plot area'
source_index = self.match_model.mapToSource(index)
item = self.model.itemFromIndex(source_index)
if isinstance(item.row, H5DatasetRow) and item.row.plot is None:
labels = []
axes = []
for d in item.group.dims:
try:
label, ds = d.items()[0]
labels.append(label)
axes.append(ds[:])
except IndexError:
print 'Could not find axis in item', item
labels.append('')
axes.append(None)
except RuntimeError:
print 'Mac bug? Probably no axis available'
dock = self.make_dock(item.name, item.group[:], labels, axes)
self.dock_area.addDock(dock)
item.plot = dock
dock.closeClicked.connect(lambda: item.__setattr__('plot', None))
def make_dock(self, name, array, labels=None, axes=None):
'returns a dockable plot widget'
labels = {pos: l for l, pos in zip(labels, ('bottom', 'left'))}
if len(array.shape) in (2, 3):
if len(array.shape) == 2:
d = CrossSectionDock(name=name, area=self.dock_area)
if len(array.shape) == 3:
d = MoviePlotDock(array, name=name, area=self.dock_area)
pos, scale = None, None
if axes is not None:
pos = [0, 0]
scale = [1, 1]
if axes[0] is not None:
pos[0] = axes[0][0]
scale[0] = axes[0][1] - axes[0][0]
if axes[1] is not None:
pos[1] = axes[1][0]
scale[1] = axes[1][1] - axes[1][0]
d.setImage(array, pos=pos, scale=scale)
if labels is not None:
d.setLabels(labels['bottom'], labels['left'], name)
if len(array.shape) == 1:
w = CrosshairPlotWidget(labels=labels)
if axes and axes[0] is not None:
w.plot(axes[0], array)
else:
w.plot(array)
d = CloseableDock(name=name, widget=w, area=self.dock_area)
#.........这里部分代码省略.........
示例15: initDialog
# 需要导入模块: from pyqtgraph.dockarea import DockArea [as 别名]
# 或者: from pyqtgraph.dockarea.DockArea import addDock [as 别名]
def initDialog(self,results=None,KData=None,bDrawText=False):
'''
orders,记录当日00:00前一日开盘时间发送的交易命令
trasactions,记录当日00:00前一日已执行的orders
positions,记录当日00:00时,各个symbols的positions
所以,这三个量都是数组,且大小不定,所以,不宜图形方式展示,适宜table方式展示
其他单值参数都可以考虑图形化方式
特别是pnl,cash,portfolio等
perf的生成时点是00:00,其内容为00:00前一天的活动
perf转化记录入result时,需要设置Index,
此Index的值为生成记录时点后的一天的收盘时间。
例如:
有三个交易日:2015-12-01,12-02,12-03
开收盘时间:Asia/Shanghai:09:30--15:00 (utc:01:30--07:00)
使用instant_fill==True方式执行订单
每日开盘时Buy(1)
有如下Events列表会生成并被处理
1)2015-12-01 00:00 utc
生成perf
perf内容:由于是第一交易日的开始时间(非开市时间),无内容可记
记录入result:
记录Index:result.index = 2015-12-01 07:00
2)2015-12-01 01:30 utc
生成order,生成transaction,生成position
3)2015-12-02 00:00 utc
生成perf
perf内容:2015-12-01 00:00 utc 至 2015-12-02 00:00 utc期间发生的交易事项及内容
记录入result:
记录Index:result.index = 2015-12-02 07:00
之后的4)5)6)同上
不合逻辑的地方需特别注意:
1)perf的生成时间和记录时间不一致,00:00生成(当日开始(非开市)),07:00记录(当日收市)
2)perf记录的是00:00之前一日的交易,记录时点却是当日收盘(当日收盘时间的记录,给人直观的理解应是记录当日开盘到收盘期间发生的业务)
'''
# 1) creates layouts
dialog = QtGui.QDialog()
mainLayout = QtGui.QHBoxLayout()
rightLayout = QtGui.QVBoxLayout()
mainLayout.addLayout(rightLayout)
dialog.setLayout(mainLayout)
dialog.setWindowTitle(('Strategy Results'))
# 2) creates widgets
# 2.1)candle
import os,sys
xpower = os.path.abspath(os.path.join(os.path.dirname(__file__),os.pardir,os.pardir,os.pardir,'midProjects','histdataUI'))
sys.path.append(xpower)
from Widgets.pgCandleWidgetCross import pgCandleWidgetCross
from Widgets.pgCrossAddition import pgCrossAddition
pgCandleView = pgCandleWidgetCross(dataForCandle=KData)
self.pricePlot(pgCandleView)
# 2.2)Pnl
PyqtGraphPnl = pgCrossAddition()
self.pnlPlot(PyqtGraphPnl,bDrawText=bDrawText)
# 2.3)Position
#PyqtGraphPosition = pgCrossAddition()
#self.positionPlot(PyqtGraphPosition)
# 2.4)portfolio
PyqtGraphPortfolio = pgCrossAddition()
self.portfolioPlot(PyqtGraphPortfolio)
# 2.5)price
PyqtGraphindicators = pgCrossAddition()
self.pricePlot(PyqtGraphindicators)
self.indicatorsPlot(PyqtGraphindicators)
# 2.6)order
#PyqtGraphOrder = pgCrossAddition()
#self.orderPlot(PyqtGraphOrder)
#self.pricePlot(PyqtGraphOrder)
from pyqtgraph.dockarea import DockArea,Dock
area = DockArea()
## Create docks, place them into the window one at a time.
## Note that size arguments are only a suggestion; docks will still have to
## fill the entire dock area and obey the limits of their internal widgets.
d1 = Dock("candles", size=(200,300)) ## give this dock the minimum possible size
d2 = Dock("pnl", closable=True, size=(200,100))
#d3 = Dock("position", size=(200,100))
d4 = Dock("portfolio", size=(200,100))
d5 = Dock("price", size=(200,100))
#d6 = Dock("order time,amount",size=(200,100))
area.addDock(d1, 'bottom')
area.addDock(d2, 'bottom')
#area.addDock(d3, 'bottom')
area.addDock(d4, 'bottom')
area.addDock(d5, 'bottom', d1)
#area.addDock(d6, 'bottom', d1)
rightLayout.addWidget(area)
d1.addWidget(pgCandleView)
d2.addWidget(PyqtGraphPnl)
#d3.addWidget(PyqtGraphPosition)
d4.addWidget(PyqtGraphPortfolio)
d5.addWidget(PyqtGraphindicators)
#d6.addWidget(PyqtGraphOrder)
PyqtGraphPnl.setXLink(pgCandleView)
#.........这里部分代码省略.........