为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

德玛西亚99 2024-01-12 10:46:26
每当我双击小部件时,我想获取 pyqtgraph 小部件上的鼠标光标坐标并将它们发送到函数。我查找了如何做并可以找到一些类似的问题,但我仍然无法获得正确的坐标。import pyqtgraph as pgfrom pyqtgraph.Qt import QtGui, QtCorefrom 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>,)我还想知道是否可以通过双击来完成此操作。
查看完整描述

1 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

您可以使用 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”。


查看完整回答
反对 回复 2024-01-12
  • 1 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信