在查看pyqtgraph,crosshair.py的十字头发示例时,十字头发总是可见的,当鼠标在地形图上时移动到鼠标的位置。这意味着,当光标退出绘图时,十字线将被卡在角上。当鼠标在情节结束时,是否有一种强有力的方法来打开或关闭交叉头发?有这些sigMouseMoved和sigMouseHover信号,但是可以以足够快的速度将鼠标移出窗口,这样sigMouseHover就不会用空参数启动,所以我认为它没有连接到mouseLeave。
发布于 2022-02-10 15:53:52
要获得mouseLeave事件,请使用继承自QWidget的leaveEvent of PlotWidget。
LeaveEvent总是在光标离开时触发,即使是快速移动的鼠标光标也是如此。
与此函数相反的是enterEvent,我们可以使用它再次显示十字线。
下面是隐藏/显示交叉头发的工作示例。
import sys
import numpy as np
import pyqtgraph as pg
from PyQt5.QtWidgets import QApplication
class CrosshairPlotWidget(pg.PlotWidget):
def __init__(self, parent=None, background='default', plotItem=None, **kargs):
super().__init__(parent=parent, background=background, plotItem=plotItem, **kargs)
self.vLine = pg.InfiniteLine(angle=90, movable=False)
self.hLine = pg.InfiniteLine(angle=0, movable=False)
self.addItem(self.vLine, ignoreBounds=True)
self.addItem(self.hLine, ignoreBounds=True)
self.hLine.hide()
self.vLine.hide()
def leaveEvent(self, ev):
"""Mouse left PlotWidget"""
self.hLine.hide()
self.vLine.hide()
def enterEvent(self, ev):
"""Mouse enter PlotWidget"""
self.hLine.show()
self.vLine.show()
def mouseMoveEvent(self, ev):
"""Mouse moved in PlotWidget"""
if self.sceneBoundingRect().contains(ev.pos()):
mousePoint = self.plotItem.vb.mapSceneToView(ev.pos())
self.vLine.setPos(mousePoint.x())
self.hLine.setPos(mousePoint.y())
if __name__ == "__main__":
app = QApplication(sys.argv)
x = [0, 1, 2, 3, 4, 5]
y = np.random.normal(size=6)
plot = CrosshairPlotWidget()
plot.plot(x, y)
plot.show()
app.exec()https://stackoverflow.com/questions/63095671
复制相似问题