图未被清除,而是继续添加到 tkinter 中现有图的下方
Graph is not cleared instead it keeps on added below the existing graph in tkinter
我是 tkinter 的新手,一旦绘制了下面给出的代码,就无法清除图形。我的目标是在按下后退按钮后清除 canvas,以便下次我可以在同一帧上绘制新图形。
我正在使用 matplotlib
从 csv 文件获取我的数据以在图表上表示
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import pandas as pd
from matplotlib.figure import Figure
import seaborn as sns
import tkinter as tk
from tkinter import ttk, filedialog
import csvedit as cv
LARGE_FONT= ("Verdana", 12)
class SeaofBTCapp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.iconbitmap(self, default="q1.ico")
tk.Tk.wm_title(self, "Diabetic Predictor")
tk.Tk.geometry(self,'600x600')
container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (StartPage, PageOne, PageTwo, PageThree):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
label = tk.Label(self, text="Start Page", font=LARGE_FONT)
label.pack(pady=10,padx=10)
button = ttk.Button(self, text="Visit Page 1",command=lambda: controller.show_frame(PageOne))
button.pack()
button2 = ttk.Button(self, text="Visit Page 2",command=lambda: controller.show_frame(PageTwo))
button2.pack()
button3 = ttk.Button(self, text="Graph Page",command=lambda: controller.show_frame(PageThree))
button3.pack()
class PageThree(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Graph Page!", font=LARGE_FONT)
label.pack(pady=10,padx=10)
button1 = ttk.Button(self, text="Back to Home",command=lambda: controller.show_frame(StartPage))
button1.pack()
button4 = ttk.Button(self, text = "Dsiplay graph", command=self.fileDialog1)
button4.pack()
def fileDialog1(self):
self.filename = filedialog.askopenfilename(initialdir = "/", title = "Select A File", filetype =(("csv files","*.csv"),("all files","*.*")) )
text = self.filename
dataset = pd.read_csv(text)
f = Figure(figsize=(5,5), dpi=100)
a = f.add_subplot(111)
sns.countplot(dataset['result'],ax=a)
canvas = FigureCanvasTkAgg(f, self)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)
toolbar = NavigationToolbar2Tk(canvas, self)
toolbar.update()
canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
我曾尝试在构造函数中创建空图,以便清楚以前的数据,但没有帮助,所以请提出实现此目的的正确方法。
我使用 canvas.get_tk_widget().pack_forget():
解决了上述问题
def clearPlotPage(self):
self.canvas.get_tk_widget().pack_forget()
self.canvas = None
print("Plot Page has been cleared")
更多详情请参考:Link
我是 tkinter 的新手,一旦绘制了下面给出的代码,就无法清除图形。我的目标是在按下后退按钮后清除 canvas,以便下次我可以在同一帧上绘制新图形。 我正在使用 matplotlib
从 csv 文件获取我的数据以在图表上表示import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import pandas as pd
from matplotlib.figure import Figure
import seaborn as sns
import tkinter as tk
from tkinter import ttk, filedialog
import csvedit as cv
LARGE_FONT= ("Verdana", 12)
class SeaofBTCapp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.iconbitmap(self, default="q1.ico")
tk.Tk.wm_title(self, "Diabetic Predictor")
tk.Tk.geometry(self,'600x600')
container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (StartPage, PageOne, PageTwo, PageThree):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
label = tk.Label(self, text="Start Page", font=LARGE_FONT)
label.pack(pady=10,padx=10)
button = ttk.Button(self, text="Visit Page 1",command=lambda: controller.show_frame(PageOne))
button.pack()
button2 = ttk.Button(self, text="Visit Page 2",command=lambda: controller.show_frame(PageTwo))
button2.pack()
button3 = ttk.Button(self, text="Graph Page",command=lambda: controller.show_frame(PageThree))
button3.pack()
class PageThree(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Graph Page!", font=LARGE_FONT)
label.pack(pady=10,padx=10)
button1 = ttk.Button(self, text="Back to Home",command=lambda: controller.show_frame(StartPage))
button1.pack()
button4 = ttk.Button(self, text = "Dsiplay graph", command=self.fileDialog1)
button4.pack()
def fileDialog1(self):
self.filename = filedialog.askopenfilename(initialdir = "/", title = "Select A File", filetype =(("csv files","*.csv"),("all files","*.*")) )
text = self.filename
dataset = pd.read_csv(text)
f = Figure(figsize=(5,5), dpi=100)
a = f.add_subplot(111)
sns.countplot(dataset['result'],ax=a)
canvas = FigureCanvasTkAgg(f, self)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)
toolbar = NavigationToolbar2Tk(canvas, self)
toolbar.update()
canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
我曾尝试在构造函数中创建空图,以便清楚以前的数据,但没有帮助,所以请提出实现此目的的正确方法。
我使用 canvas.get_tk_widget().pack_forget():
解决了上述问题def clearPlotPage(self):
self.canvas.get_tk_widget().pack_forget()
self.canvas = None
print("Plot Page has been cleared")
更多详情请参考:Link