亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲取 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 關注
  • 279 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號