我正在尝试使用tkinter和matplotlib创建与某些实验室设备配对的接口,但是现在我只是在加载一些旧的测试数据。我正在尝试在NavigationToolbar2Tk导航栏中添加。
运行程序时,该栏会正确弹出,但是每次单击其中一个按钮时,都会出现错误“ FigureCanvasTkAgg”对象没有属性“ manager”。有趣的是,除保存外,所有按钮仍将执行其操作,只是不断吐出错误。我尝试为导航框创建一个单独的框架,但是没有用。
import tkinter
import matplotlib
matplotlib.use('TkAgg')
from tkinter import Tk
from tkinter import Label as label
from tkinter import Message
from tkinter import Button as button
from tkinter import Canvas as canvas
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib import pyplot as plt
from tkinter import Entry as entry
from matplotlib import style
from matplotlib.backends.backend_tkagg import NavigationToolbar2Tk
import url
dataset = url.open_and_convert_csv("Wednesday_4pm_107_2_Blue.csv")
data = dataset[2:]
x = []
y = []
for row in data:
strain = row[3]
x.append(strain)
stress = row[4]
y.append(stress)
plt.grid(True, which='major', axis='both')
plt.plot(x, y)
figure = plt.gcf()
def tensile_graph():
canv.get_tk_widget().grid(column = 1, row = 1)
def title():
title_text = title_box.get()
title_box.delete(0,len(title_text))
plt.title(title_text)
figure = plt.gcf()
canv = FigureCanvasTkAgg(figure, master=top)
canv.get_tk_widget().grid(column=1, row=1)
def x_ax():
x_ax_text = x_ax_box.get()
x_ax_box.delete(0, len(x_ax_text))
plt.xlabel(x_ax_text)
figure = plt.gcf()
canv = FigureCanvasTkAgg(figure, master=top)
canv.get_tk_widget().grid(column=1, row=1)
def y_ax():
y_ax_text = y_ax_box.get()
y_ax_box.delete(0, len(y_ax_text))
plt.ylabel(y_ax_text)
figure = plt.gcf()
canv = FigureCanvasTkAgg(figure, master=top)
canv.get_tk_widget().grid(column=1, row=1)
top = tkinter.Tk()
top.geometry('1000x600+30+30')
canv = FigureCanvasTkAgg(figure, master=top)
tensile_graph()
options_frame = tkinter.Frame(top)
options_frame.grid(row = 1, column = 0)
title_box = entry(options_frame)
title_box.grid(row = 1, column = 0)
text = title_box.get()
title_button = button(options_frame,text='Apply',command = title)
title_button.grid(row = 1, column = 1)
title_label = label(options_frame,text='Title')
title_label.grid(row = 0, column = 0)
x_axlabel = label(options_frame,text='X Axis Label')
x_axlabel.grid(row = 2, column = 0)
x_ax_box = entry(options_frame)
x_ax_box.grid(row = 3, column = 0)
x_ax_button = button(options_frame, text = 'Apply', command = x_ax)
x_ax_button.grid(row = 3, column = 1)
y_axlabel = label(options_frame,text='Y Axis Label')
y_axlabel.grid(row = 4, column = 0)
y_ax_box = entry(options_frame)
y_ax_box.grid(row = 5, column = 0)
y_ax_button = button(options_frame, text = 'Apply', command = y_ax)
y_ax_button.grid(row = 5, column = 1)
toolbar_frame = tkinter.Frame(top)
toolbar_frame.grid(column = 1, row = 1)
toolbar = NavigationToolbar2Tk(canv,toolbar_frame)
toolbar.update()
canv._tkcanvas.grid(row=1, column=1)
top.mainloop()
答案 0 :(得分:0)
我遇到了同样的问题,而且当我将鼠标悬停在图上时,我不断遇到错误,我发现必须降级matplotlib。以下是解决我的问题的版本:
python 3.7.3, matplotlib 2.2.2
要降级您的matplotlib版本,请打开提示并输入:
conda install matplotlib == 2.2.2
答案 1 :(得分:0)
我已设法解决此错误。实际上,这是NavigationToolbar2Tk类中的错误。如果要修复它,则必须自己修改其代码。您只需要在NavigationNavigatorbar2Tk类中更改一行代码。
您不会再看到此错误。
答案 2 :(得分:-1)
Blockquote 我已经解决了这个错误。它实际上是 NavigationToolbar2Tk 类中的一个错误。如果你想修复它,你必须自己修改他们的代码。您只需要更改 NavigationToolbar2Tk 类中的一行代码。
文森特的回答很有魅力。 由于我无法在他的回答中添加直接评论,因此我将在此处添加要修改的文件:
<python_installation>\Lib\site-packages\matplotlib\backends\_backend_tk.py