【问题标题】:How to get mouse cursor coordinates on a pyqtgraph widget?如何在 pyqtgraph 小部件上获取鼠标光标坐标?
【发布时间】:2021-02-10 07:46:40
【问题描述】:

每当我双击小部件时,我想在 pyqtgraph 小部件上获取鼠标光标坐标并将它们发送到函数。我查找了如何并且可以找到一些类似的问题,但我仍然无法获得正确的坐标。

import pyqtgraph as pg
from pyqtgraph.Qt import QtGui, QtCore
from pyqtgraph.dockarea import *
from PyQt5.QtGui import *
from PyQt5.QAxContainer import *
from PyQt5.QtCore import *

def on_double_click_out(event):
    pos = event
    print('clicked', pos)
        
class Plotter():
    def __init__(self):
        pg.setConfigOption('background', 'w')
        pg.setConfigOption('foreground', 'k')

        self.win = QtGui.QMainWindow()
        self.area = DockArea()
        self.win.setCentralWidget(self.area)
        self.win.resize(1000,500)
        self.win.setWindowTitle('pyqtgraph example: dockarea')
 
        self.dock_TR = Dock("TR", size=(300,10))  
        self.dock_TR.hideTitleBar()
        
        self.area.addDock(self.dock_TR) 
        
        self.widgetTR = pg.PlotWidget()
        self.widgetTR.showGrid(x=True, y=True, alpha=0.3)   
        self.dock_TR.addWidget(self.widgetTR)        
        self.win.show()        
            
p = Plotter()
proxy = pg.SignalProxy(p.widgetTR.scene().sigMouseClicked, rateLimit=60, slot=on_double_click_out)

当我在 widgetTR 上单击(不是双击)时,我得到了一些坐标,但它们与 x、y 轴无关。例如,当我点击小部件的 (1, 1) 时,结果是clicked (<MouseClickEvent (573,-259) button=1>,) 我也想知道我是否可以通过双击来做到这一点。

【问题讨论】:

    标签: python pyqtgraph


    【解决方案1】:

    您可以使用 pyqtgraph.GraphicsScene.mouseEvents.MouseClickEvent.double() 查看 MouseClickEvent 是否为双击。

    您确定坐标不正确吗?坐标系从左上角的(0,0)开始。

    试试这个代码,它对我有用:

    import pyqtgraph as pg
    from pyqtgraph.Qt import QtGui, QtCore
    from pyqtgraph.dockarea import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    from PyQt5 import QtCore, QtGui, QtWidgets, uic
    import numpy as np
    
    def on_double_click_out(event):
        mouseEvent = event[0]
        mousePoint = mouseEvent.pos()
        if mouseEvent.double():
            print("Double click")
        if p.p1.sceneBoundingRect().contains(mousePoint):        
            print('x=', mousePoint.x(), ' y=', mousePoint.y())
            
    class Plotter():
        def __init__(self):
            pg.setConfigOption('background', 'w')
            pg.setConfigOption('foreground', 'k')
    
            self.win = pg.GraphicsLayoutWidget(show=True)
            self.win.resize(1000,500)
            self.win.setWindowTitle('pyqtgraph example: dockarea')
     
            self.p1 = self.win.addPlot()
            self.win.show()        
                
    p = Plotter()
    proxy = pg.SignalProxy(p.win.scene().sigMouseClicked, rateLimit=60, slot=on_double_click_out)
    
    if __name__ == '__main__':
        import sys
        if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
            QtGui.QApplication.instance().exec_()
    

    您还可以查看 pyqtgraph 示例“crosshair.py”。

    【讨论】:

      猜你喜欢
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多