ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 如何在pyqtgraph中绘制十字准线并绘制鼠标位置?

2019-05-29 10:46:05  阅读:233  来源: 互联网

标签:python python-2-7 plot pyqtgraph


我是Python和pyqtgraph的新手.我正在为不同类型的信号工作.当我想在鼠标位置包含十字准线和文本标签时,我会陷入困境.我正在使用GridLayout,因为稍后该图表将与其他几个元素结合使用.

我尝试调整pyqtgraph示例十字线/鼠标交互但除了pyqtgraph中的许多其他东西我不明白vm = signalgraph.vb在mousemoved()之前的含义并且脚本引发了一个NameError

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

#QtGui.QApplication.setGraphicsSystem('raster')
app = QtGui.QApplication([])
mainwindow = QtGui.QMainWindow()
mainwindow.setWindowTitle('pyqtgraph example: PlotWidget')
mainwindow.resize(1000,800)
cw = QtGui.QWidget()
mainwindow.setCentralWidget(cw)

gridlayout = QtGui.QGridLayout()
cw.setLayout(gridlayout)

# define plot windows
signalgraph = pg.PlotWidget(name='Signalgraph')

# set position and size of plot windows
gridlayout.addWidget(signalgraph,0,0)

mainwindow.show()


# sample data
x = [0,1,2,3,4,5,6,7,8,9,10]
y = [0,0,0,8,8,8,9,9,9,0,0]

# plot 1
curve = pg.PlotCurveItem(x,y[:-1],pen='w',stepMode=True)
signalgraph.addItem(curve)

#cross hair in signalgraph
vLine = pg.InfiniteLine(angle=90, movable=False)
hLine = pg.InfiniteLine(angle=0, movable=False)
signalgraph.addItem(vLine, ignoreBounds=True)
signalgraph.addItem(hLine, ignoreBounds=True)

# Here I am not sure what to do ...
vb = signalgraph.vb
##vb = pg.ViewBox()


def mouseMoved(evt):
    pos = evt[0]
    if signalgraph.sceneBoundingRect().contains(pos):
        mousePoint = vb.mapSceneToView(pos)
        index = int(mousePoint.x())
        if index > 0 and index < len(x):
            label.setText("<span style='font-size: 12pt'>x=%0.1f, <span style='color: red'>y1=%0.1f</span>" % (mousePoint.x(), y[index], data2[index]))
        vLine.setPos(mousePoint.x())
        hLine.setPos(mousePoint.y())


proxy = pg.SignalProxy(signalgraph.scene().sigMouseMoved, rateLimit=60, slot=mouseMoved)
signalgraph.scene().sigMouseMoved.connect(mouseMoved)


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

非常感谢
问候
迈克尔

解决方法:

“vb”是PlotItem类的一个属性.由于signalgraph是一个PlotWidget,你可能不会期望它具有相同的属性(虽然它确实从其内部PlotItem包装了一些方法).所以你需要的代码是:

vb = signalgraph.plotItem.vb

如果您对PlotWidget和PlotItem之间的区别感到困惑,请阅读QGraphicsView和QGraphicsItem类(均在Qt文档中). PlotWidget只不过是一个内部显示PlotItem的QGraphicsView.

标签:python,python-2-7,plot,pyqtgraph
来源: https://codeday.me/bug/20190529/1177467.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有