Ajouter un curseur dans WX

Beginner

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

Introduction

Ce tutoriel vous guidera tout au long du processus d'ajout d'un curseur dans WX pour rapporter les coordonnées de données. Nous utiliserons Matplotlib, une bibliothèque de tracé pour Python qui fournit des outils pour créer une variété de graphiques, diagrammes et courbes.

Conseils sur la VM

Une fois le démarrage de la VM terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter Notebook pour pratiquer.

Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.

Créer une trame de canevas

Tout d'abord, nous allons créer une trame de canevas qui contiendra le tracé Matplotlib. Nous ajouterons un tracé sinusoïdal pour démontrer la fonctionnalité du curseur.

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

        ## Créer une Figure et ajouter un sous-graphe
        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)

        ## Tracer la courbe sinusoïdale
        self.axes.plot(t, s)
        self.axes.set_xlabel('t')
        self.axes.set_ylabel('sin(t)')

        ## Créer un FigureCanvas pour afficher le tracé
        self.figure_canvas = FigureCanvas(self, -1, self.figure)

        ## Lier l'événement motion_notify_event pour mettre à jour la barre de statut
        self.figure_canvas.mpl_connect(
           'motion_notify_event', self.UpdateStatusBar)

        ## Lier l'événement enter_window pour changer le curseur
        self.figure_canvas.Bind(wx.EVT_ENTER_WINDOW, self.ChangeCursor)

        ## Créer un sizer et ajouter le FigureCanvas à celui-ci
        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()

        ## Créer une barre de statut pour rapporter l'emplacement du curseur
        self.statusBar = wx.StatusBar(self, -1)
        self.SetStatusBar(self.statusBar)

        ## Créer une barre d'outils pour naviguer dans le tracé
        self.toolbar = NavigationToolbar2Wx(self.figure_canvas)
        self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
        self.toolbar.Show()

Changer le curseur

Ensuite, nous allons définir une méthode pour changer le curseur lorsqu'il entre dans la trame de canevas. Dans ce cas, nous changerons le curseur en un pointillé.

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

Mettre à jour la barre de statut

Enfin, nous allons définir une méthode pour mettre à jour la barre de statut avec l'emplacement du curseur chaque fois que la souris se déplace sur le tracé.

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

Sommaire

Félicitations ! Vous avez réussi à ajouter un curseur dans WX pour rapporter les coordonnées de données à l'aide de Matplotlib. En suivant les étapes décrites dans ce tutoriel, vous pouvez facilement personnaliser le curseur pour répondre à vos besoins.