Я пытаюсь создать небольшой tkinter GUI, который использует классы, как видно на этом канале site / youtube .
Моя программа через tk.Menu загрузит CSV-файл и напечатает график внутри холста. Если я загружу другой файл, график будет очищен и воссоздан с двумя строками. При добавлении нового файла будет увеличено количество линий на графике и так далее. У меня уже есть программа, которая делает это, но не использует классы. Ниже приведен вывод программы, которая использует только функции. Использование только функций
Использование классов дает мне отдельное окно, которое я хочу встроить в холст. Использование классов
Я думаю, что решение простое, но я не вижу его самостоятельно.
Мой код ниже:
f = Figure()
class StartPage(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
label = tk.Label(self, text = "Start Page", font = SMALL_FONT)
label.pack(pady=10, padx = 10)
btn_About = ttk.Button(self, text="About!",
command=lambda: controller.show_frame(AboutPage))
btn_About.place(relx = 1.0, rely = 0.0, anchor=NE)
#Graph Canvas --> where the graph will show + navigation toolbar
canvas = FigureCanvasTkAgg(f, self)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
toolbar = NavigationToolbar2Tk(canvas, self)
toolbar.update()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
Функция для отображения графика:
def PlotGraph():
global count
plt.clf()
# values taken every time a csv file is loaded
TakeValues() #x values are the same, y values are changing
# change plot axis scale using numpy arange method
plt.xticks(np.arange(0, max(xdata)))
plt.yticks(np.arange(minLSB_err, maxLSB_err))
if count != 0:
for i in range(count + 1):
label = filename_dict[i]
plt.plot(xdata, ydata[i], label=label[:-4], lw=2)
else:
label = filename_dict[0]
plt.plot(xdata, ydata, label=label[:-4], lw=2)
plt.legend(bbox_to_anchor=(0, 1.02, 1, .102), loc=3,
ncol=2, borderaxespad=0)
plt.title("Total Error")
plt.xlabel("Voltage Applied [V]")
plt.ylabel("LSB deviation")
plt.tight_layout()
count = count + 1
plt.draw()
try:
plt.show()
except (AttributeError) as e:
print("Error occured:",e)
[ОБНОВЛЕНИЕ] Где и откуда должен быть размещен PlotGraph () я должен назвать это? Теперь это так:
filemenu.add_command(label="Open", command=PlotGraph) #Open CSV files
Спасибо.