c359d5fad9
* Fix examples/customPlot.py: mouseDragEvent misses axis argument Fixes #1277 * customPlot.py: Update methodolgy to disable menu If there's an argument for this, we should use it * customPlot.py: Show how to disable axis interaction * Fix ViewBox: Moving axis in RectMode not implemented => use normal move mode Grabbing an axis in RectMode leads to the zoom rectangle being displayed in unreasonable positions. In this case, fall back to normal mode. * customPlot.py: Only disable right-click zoom for demonstration In cases where continuous zooming is not wished (e.g. in case of complicated rebinning after zooming), this might come in handy and there is no reason not to show it. Co-authored-by: 2xB <2xB@users.noreply.github.com>
53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
This example demonstrates the creation of a plot with
|
|
DateAxisItem and a customized ViewBox.
|
|
"""
|
|
|
|
|
|
import initExample ## Add path to library (just for examples; you do not need this)
|
|
|
|
import pyqtgraph as pg
|
|
from pyqtgraph.Qt import QtCore, QtGui
|
|
import numpy as np
|
|
import time
|
|
|
|
class CustomViewBox(pg.ViewBox):
|
|
def __init__(self, *args, **kwds):
|
|
kwds['enableMenu'] = False
|
|
pg.ViewBox.__init__(self, *args, **kwds)
|
|
self.setMouseMode(self.RectMode)
|
|
|
|
## reimplement right-click to zoom out
|
|
def mouseClickEvent(self, ev):
|
|
if ev.button() == QtCore.Qt.RightButton:
|
|
self.autoRange()
|
|
|
|
## reimplement mouseDragEvent to disable continuous axis zoom
|
|
def mouseDragEvent(self, ev, axis=None):
|
|
if axis is not None and ev.button() == QtCore.Qt.RightButton:
|
|
ev.ignore()
|
|
else:
|
|
pg.ViewBox.mouseDragEvent(self, ev, axis=axis)
|
|
|
|
|
|
app = pg.mkQApp()
|
|
|
|
axis = pg.DateAxisItem(orientation='bottom')
|
|
vb = CustomViewBox()
|
|
|
|
pw = pg.PlotWidget(viewBox=vb, axisItems={'bottom': axis}, enableMenu=False, title="PlotItem with DateAxisItem and custom ViewBox<br>Menu disabled, mouse behavior changed: left-drag to zoom, right-click to reset zoom")
|
|
dates = np.arange(8) * (3600*24*356)
|
|
pw.plot(x=dates, y=[1,6,2,4,3,5,6,8], symbol='o')
|
|
pw.show()
|
|
pw.setWindowTitle('pyqtgraph example: customPlot')
|
|
|
|
r = pg.PolyLineROI([(0,0), (10, 10)])
|
|
pw.addItem(r)
|
|
|
|
## Start Qt event loop unless running in interactive mode or using pyside.
|
|
if __name__ == '__main__':
|
|
import sys
|
|
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
|
|
QtGui.QApplication.instance().exec_()
|