entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Obtener coordenadas cartesianas al pulsar con el mouse un punto cualquiera en una gráfica y producir acciones de trading

Hola a todos.

Estaría muy agradecido si me pudieran ayudar con el siguiente problema:
Estoy programando, en python, una GUI en la que se le permita al usuario pulsar, con el mouse, cualquier punto sobre una gráfica. Ese evento producirá cierta información relacionada con el punto pulsado.

El problema es que para producir la información del punto, se requiere convertir las coordenadas en pixeles del punto a coordenadas cartesianas, es decir, obtener las coordenadas x y y originales. Donde x es un entero que va desde xmin=0 hasta un xmax. Mientras que y es un número real, que va desde un ymin hasta un ymax.

Obtengo unos valores, pero no logro conseguir valores, mas o menos, precisos con las siguientes instrucciones, que tengo dentro de la función que atiende el evento de pulsar el mouse:

    abs_coord_x = root.winfo_pointerx() - root.winfo_rootx()
    abs_coord_y = root.winfo_pointery() - root.winfo_rooty()  

    ancho =root.winfo_width()        
    alto = root.winfo_height()
    xreal=(abs_coord_x*(xmax - xmin))/ancho + xmin
    yreal=((alto - abs_coord_y)*(ymax - ymin))/alto + ymin

Evidentemente, existen problemas de identificación de los márgenes de las ventana donde inserto el gráfico, pero no sé cómo obtener esos márgenes. El gráfico se inserta en una ventana creada con tkinter. Con las siguientes instrucciones se observa que se pueden obtener esas coordenadas, pero no veo la manera de poderlas usar en mi programa:

    toolbar = NavigationToolbar2Tk(canvas, root)
    toolbar.update()
    canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)

Ojalá me puedan dar luces en ésto.

Un saludo.
José L.

0voto

Luciano comentado

Hola a todos,
después de revisar por allá y por acá, me di cuenta que existen unas funciones para convertir las coordenadas de pixeles a cartesianas y viceversa.

transData.transform()
transData.inverted()

Obtengo de manera correcta la coordenada cartesiana X, pero no la coordenada Y.
Si alguien me puede indicar cómo obtener de manera correcta la coordenada y, lo agradecería mucho.

Un saludo
José L.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta