Python 如何在pyqtgraph小部件上获取鼠标光标坐标?

Python 如何在pyqtgraph小部件上获取鼠标光标坐标?,python,pyqtgraph,Python,Pyqtgraph,每当我双击pyqtgraph小部件时,我想获取pyqtgraph小部件上的鼠标光标坐标,并将它们发送给函数。我查了一下怎么做,可以找到一些类似的问题,但我仍然无法得到正确的坐标 import pyqtgraph as pg from pyqtgraph.Qt import QtGui, QtCore from pyqtgraph.dockarea import * from PyQt5.QtGui import * from PyQt5.QAxContainer import * from Py

每当我双击pyqtgraph小部件时,我想获取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)

当我在Widgett上单击(而不是双击)时,我会得到一些坐标,但它们与x、y轴无关。例如,当我在小部件的(1,1)处单击时,结果是
单击(,)
我还想知道是否可以通过双击来完成此操作。

您可以使用pyqtgraph.graphicscene.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”