问题
When I run the following script:
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()
I get a warning:
MatplotlibDeprecationWarning: The NavigationToolbar2TkAgg class was
deprecated in version 2.2.
Why is the NavigationToolbar2TkAg
deprecated and what should I use instead?
回答1:
What to use instead?
Matplotlib now wants you to use
NavigationToolbar2Tk
instead of NavigationToolbar2TkAgg
.
Why is it deprecated?
The Navigation toolbar is independent of the renderer. E.g. both the Agg renderer as well as the cairo renderer can use the same navigation toolbar. Hence it makes sense to provide it under a name that does not have the renderer's name ("Agg") in it.
回答2:
I beleive this means it was stopped being updated therefore may be unstable. I use it in my current project, the error always shows but the toolbar works fine.
来源:https://stackoverflow.com/questions/50330320/what-to-use-instead-of-navigationtoolbar2tkagg