Agregar un cursor en WX

Beginner

This tutorial is from open-source community. Access the source code

Introducción

Este tutorial lo guiará a través del proceso de agregar un cursor en WX para reportar coordenadas de datos. Utilizaremos Matplotlib, una biblioteca de trazado para Python que proporciona herramientas para crear una variedad de gráficos, diagramas y gráficas.

Consejos sobre la VM

Una vez que se haya completado la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje comentarios después de la sesión y lo resolveremos rápidamente para usted.

Crear un marco de lienzo

Primero, crearemos un marco de lienzo que contendrá el trazado de Matplotlib. Agregaremos un trazado senoidal para demostrar la funcionalidad del cursor.

class CanvasFrame(wx.Frame):
    def __init__(self, ):
        super().__init__(None, -1, 'CanvasFrame', size=(550, 350))

        ## Crear una Figura y agregar un subtrayado
        self.figure = Figure()
        self.axes = self.figure.add_subplot()
        t = np.arange(0.0, 3.0, 0.01)
        s = np.sin(2*np.pi*t)

        ## Trazar la curva senoidal
        self.axes.plot(t, s)
        self.axes.set_xlabel('t')
        self.axes.set_ylabel('sin(t)')

        ## Crear un FigureCanvas para mostrar el trazado
        self.figure_canvas = FigureCanvas(self, -1, self.figure)

        ## Vincular el evento motion_notify_event para actualizar la barra de estado
        self.figure_canvas.mpl_connect(
           'motion_notify_event', self.UpdateStatusBar)

        ## Vincular el evento enter_window para cambiar el cursor
        self.figure_canvas.Bind(wx.EVT_ENTER_WINDOW, self.ChangeCursor)

        ## Crear un sizer y agregar el FigureCanvas a él
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.figure_canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
        self.SetSizer(self.sizer)
        self.Fit()

        ## Crear una barra de estado para reportar la ubicación del cursor
        self.statusBar = wx.StatusBar(self, -1)
        self.SetStatusBar(self.statusBar)

        ## Crear una barra de herramientas para navegar por el trazado
        self.toolbar = NavigationToolbar2Wx(self.figure_canvas)
        self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
        self.toolbar.Show()

Cambiar el cursor

A continuación, definiremos un método para cambiar el cursor cuando ingrese al marco de lienzo. En este caso, cambiaremos el cursor a un objetivo.

def ChangeCursor(self, event):
    self.figure_canvas.SetCursor(wx.Cursor(wx.CURSOR_BULLSEYE))

Actualizar la barra de estado

Finalmente, definiremos un método para actualizar la barra de estado con la ubicación del cursor cada vez que el mouse se mueva sobre el trazado.

def UpdateStatusBar(self, event):
    if event.inaxes:
        self.statusBar.SetStatusText(f"x={event.xdata}  y={event.ydata}")

Resumen

¡Felicidades! Has agregado con éxito un cursor en WX para reportar coordenadas de datos utilizando Matplotlib. Siguiendo los pasos descritos en este tutorial, puedes personalizar fácilmente el cursor para adaptarlo a tus necesidades.