web-dev-qa-db-fra.com

Quoi utiliser à la place de NavigationToolbar2TkAgg?

Quand j'exécute le script suivant:

import tkinter as tk
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.figure
import matplotlib.backends.backend_tkagg
import numpy as np

def on_key_event(event, canvas, toolbar):
    matplotlib.backend_bases.key_press_handler(event, canvas, toolbar)

matplotlib.use('TkAgg')
root = tk.Tk()
root.wm_title('Test window')
fig = matplotlib.figure.Figure(figsize=(9.333, 7), dpi=100)
a = fig.add_subplot(111)
axes = fig.gca()
x = np.linspace(0, 2*np.pi, 100)
axes.plot(x, np.sin(x), marker='.')
axes.set_title('sin(x)')
axes.grid()
canvas = matplotlib.backends.backend_tkagg.FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(fill=tk.X, expand=1)
canvas.mpl_connect(
    'key_press_event',
    lambda event: on_key_event(event, canvas, toolbar)
)
toolbar = matplotlib.backends.backend_tkagg.NavigationToolbar2TkAgg(
    canvas, root
)
toolbar.update()
root.bind('<Control-w>', lambda event: root.destroy())
tk.mainloop()

Je reçois un avertissement:

MatplotlibDeprecationWarning: The NavigationToolbar2TkAgg class was
deprecated in version 2.2.

Pourquoi le NavigationToolbar2TkAg est-il obsolète et que devrais-je utiliser à la place?

4
Håkon Hægland

Quoi utiliser à la place?

Matplotlib veut maintenant que vous utilisiez 

NavigationToolbar2Tk

au lieu de NavigationToolbar2TkAgg.

Pourquoi est-ce obsolète?

La barre d’outils de navigation est indépendante du moteur de rendu. Par exemple. Le rendu Agg ainsi que le rendu cairo peuvent utiliser la même barre d'outils de navigation. Il est donc logique de le fournir sous un nom qui ne contient pas le nom du rendu ("Agg").

Je crois que cela signifie qu'il a été arrêté d'être mis à jour donc peut-être instable. Je l'utilise dans mon projet actuel, l'erreur indique toujours, mais la barre d'outils fonctionne bien.

0
Bruce Pouncey