Hinzufügen eines Cursors in WX

MatplotlibMatplotlibBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Tutorial wird Ihnen der Prozess des Hinzufügens eines Cursors in WX zur Darstellung von Datenkoordinaten erläutert. Wir werden Matplotlib verwenden, eine Plotbibliothek für Python, die Werkzeuge zur Erstellung einer Vielzahl von Diagrammen, Grafiken und Plots bietet.

Tipps für virtuelle Maschinen

Nachdem der virtuelle Maschinenstart abgeschlossen ist, klicken Sie in der linken oberen Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie während des Lernens Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Erstellen eines Canvas-Frames

Zunächst werden wir einen Canvas-Frame erstellen, in dem das Matplotlib-Diagramm dargestellt werden soll. Wir werden ein Sinus-Diagramm hinzufügen, um die Cursor-Funktionalität zu demonstrieren.

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

        ## Erstellen Sie eine Figur und fügen Sie ein Subplot hinzu
        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)

        ## Zeichnen Sie die Sinuskurve
        self.axes.plot(t, s)
        self.axes.set_xlabel('t')
        self.axes.set_ylabel('sin(t)')

        ## Erstellen Sie einen FigureCanvas, um das Diagramm anzuzeigen
        self.figure_canvas = FigureCanvas(self, -1, self.figure)

        ## Binden Sie das motion_notify_event, um die Statuszeile zu aktualisieren
        self.figure_canvas.mpl_connect(
           'motion_notify_event', self.UpdateStatusBar)

        ## Binden Sie das enter_window-Ereignis, um den Cursor zu ändern
        self.figure_canvas.Bind(wx.EVT_ENTER_WINDOW, self.ChangeCursor)

        ## Erstellen Sie einen Sizer und fügen Sie den FigureCanvas hinzu
        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()

        ## Erstellen Sie eine Statuszeile, um die Cursor-Position anzuzeigen
        self.statusBar = wx.StatusBar(self, -1)
        self.SetStatusBar(self.statusBar)

        ## Erstellen Sie eine Symbolleiste, um das Diagramm zu navigieren
        self.toolbar = NavigationToolbar2Wx(self.figure_canvas)
        self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
        self.toolbar.Show()

Ändern des Cursors

Als nächstes werden wir eine Methode definieren, um den Cursor zu ändern, wenn er den Canvas-Frame betritt. In diesem Fall werden wir den Cursor in einen Kreiszeiger umwandeln.

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

Aktualisieren der Statuszeile

Schließlich werden wir eine Methode definieren, um die Statuszeile mit der Cursor-Position zu aktualisieren, wenn sich die Maus über dem Diagramm bewegt.

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

Zusammenfassung

Herzlichen Glückwunsch! Sie haben erfolgreich einen Cursor in WX hinzugefügt, um Datenkoordinaten mit Matplotlib anzuzeigen. Indem Sie den in diesem Tutorial beschriebenen Schritten folgen, können Sie den Cursor leicht an Ihre Bedürfnisse anpassen.