Matplotlib 可以使用不同的backends 来显示绘图窗口。
通常它使用PyQt,但您可以使用Tk 运行它
import numpy as np
import matplotlib.pyplot as plt
plt.switch_backend('tkagg')
y = [i**2 for i in range(101)]
plt.plot(y)
plt.show()
PyQt 使用NavigationToolbar2QT 添加按钮运行功能edit_properties
但是Tk 使用的NavigationToolbar2Tk 没有这个功能。
他们还使用不同的代码来创建带有子图选项的窗口。
同样的问题是当你创建Tkinter 程序时。它必须使用NavigationToolbar2Tk 而没有edit_properties。
您必须创建自己的NavgationToolbar 并添加自己的功能来编辑属性。
import tkinter as tk # PEP8: `import *` is not preferred
import tkinter.ttk as ttk
import tkinter.messagebox as msg
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import matplotlib.pyplot as plt
class MyToolbar(NavigationToolbar2Tk):
def __init__(self, canvas, parent):
self.toolitems = (
('Home', 'Lorem ipsum dolor sit amet', 'home', 'home'),
('Back', 'consectetuer adipiscing elit', 'back', 'back'),
('Forward', 'sed diam nonummy nibh euismod', 'forward', 'forward'),
(None, None, None, None),
('Pan', 'tincidunt ut laoreet', 'move', 'pan'),
('Zoom', 'dolore magna aliquam', 'zoom_to_rect', 'zoom'),
# new button in toolbar
("Customize", "Edit axis, curve and image parameters", "subplots", "edit_parameters"),
(None, None, None, None),
('Subplots', 'putamus parum claram', 'subplots', 'configure_subplots'),
('Save', 'sollemnes in futurum', 'filesave', 'save_figure'),
)
super().__init__(canvas, parent)
def edit_parameters(self):
print("You have to create edit_parameters()")
msg.showwarning("Warning", "You have to create edit_parameters()")
# --- main ---
y = [i**2 for i in range(101)]
root = tk.Tk()
fig = plt.Figure(figsize=(5, 5), dpi=100)
plot1 = fig.add_subplot(111)
plot1.plot(y)
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().pack(fill='both', expand=True)
#canvas.draw()
#toolbar = NavigationToolbar2Tk(canvas, root)
toolbar = MyToolbar(canvas, root) # <-- uses own Toolbar
#toolbar.update()
root.mainloop()