【问题标题】:Crosshair appear and disappear on mouse-in and mouse-out鼠标移入和移出时十字准线出现和消失
【发布时间】:2020-11-15 14:58:50
【问题描述】:

在查看pyqtgraphcrosshair.py 的十字准线示例时,十字准线始终可见,并在鼠标悬停在绘图上时移动到鼠标的位置。这意味着当光标退出绘图时,十字准线将卡在角落。当鼠标悬停在绘图上时,是否有一种可靠的方法来打开和关闭十字准线?有这些sigMouseMovedsigMouseHover 信号,但是可以将鼠标移出窗口的速度足够快,以至于sigMouseHover 不会因空参数而触发,所以我认为它与@987654326 无关@。

【问题讨论】:

    标签: pyqtgraph


    【解决方案1】:

    要获取mouseLeave 事件,请使用PlotWidget 中的leaveEvent,它继承自QWidget
    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      • 2011-09-23
      相关资源
      最近更新 更多