pyqtgraph cómo obtener correctamente la posición del clic del mouse
Preparé una función correcta onMouseMoved que muestra correctamente las coordenadas de mi mouse, pero cuando hago clic en algún lugar, Python imprime las coordenadas de mi ventana en lugar de mi gráfico. Intenté hacerlo de la misma manera que para onMouseMoved pero no funciona. También intenté usar mouseClickEvent.scenePos() en lugar de mouseClickEvent pero tampoco funciona.
import sys
from PyQt5 import QtWidgets
from pyqtgraph import PlotWidget, plot
import pyqtgraph as pg
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, args, *kwargs):
super(MainWindow, self).__init__(args, *kwargs)
self.graphWidget = pg.PlotWidget()
self.setCentralWidget(self.graphWidget)
hour = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
temperature = [30, 32, 34, 32, 33, 31, 29, 32, 35, 45]
self.graphWidget.plot(hour, temperature)
self.label = pg.TextItem(text="X: {} \nY: {}".format(0, 0))
self.graphWidget.addItem(self.label)
self.setMouseTracking(True)
self.graphWidget.scene().sigMouseMoved.connect(self.onMouseMoved)
self.graphWidget.scene().sigMouseClicked.connect(self.mouse_clicked)
def onMouseMoved(self, evt):
if self.graphWidget.plotItem.vb.mapSceneToView(evt):
point = self.graphWidget.plotItem.vb.mapSceneToView(evt)
self.label.setHtml(
"<p style='color:white'>X: {0} <br> Y: {1}</p>".format(point.x(), point.y()))
def mouse_clicked(self, mouseClickEvent):
# mouseClickEvent is a pyqtgraph.GraphicsScene.mouseEvents.MouseClickEvent
print('Hizo clic en el gráfico 0x{:x}, evento: {}'.format(id(self), mouseClickEvent))
def main():
app = QtWidgets.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
if name == 'main':
main()
davy.ai
El problema con la función actual
mouse_clicked
es que solo imprimemouseClickEvent
, que contiene información sobre el evento de clic del mouse pero no su posición en el gráfico. Para imprimir las coordenadas del clic del mouse en el gráfico, necesitamos usar la funciónmapFromScene
para convertir las coordenadas de la escena a coordenadas del gráfico.Aquí está la función
mouse_clicked
actualizada que debería funcionar:Primero verificamos si la posición del clic del mouse está dentro del rectángulo delimitador del gráfico, luego usamos
mapSceneToView
para obtener las coordenadas del gráfico del clic del mouse. Finalmente, imprimimos estas coordenadas junto con un mensaje que indica el gráfico en el que se hizo clic.