У меня есть графический интерфейс, в котором я создал холст, и у меня есть две рамки, созданные внутри него и использующие canvas.create_window . Один сверху с четырьмя кнопками. По нажатию кнопки я должен создатькадр с некоторыми виджетами до первого кадра.Итак, теперь я хочу, чтобы предыдущий кадр был разрушен (или обновлен, или очищен, или удален), пока я переключаюсь между кнопками. Теперь кадры накладываются друг на друга. Поэтому ниже мой код,
from tkinter import *
#Creating root window
root = Tk()
root.geometry("1000x1000")
#Still don't know how it works but some how made it work :P :P
root.grid_rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
root.columnconfigure(1, weight=0)
#Creaed canvas for setting up a scroll bar
canv=Canvas(root,width=850, height=650, background='blue')
vsb = Scrollbar(root, orient="vertical", command=canv.yview)
canv.config(yscrollcommand=vsb.set)
vsb.grid(row=1,column=1,sticky="ns")
canv.config(scrollregion=(0, 0,600,1000))
canv.grid(row=1, column=0)
canv.bind('<Configure>',canv.config(scrollregion=canv.bbox('all')))
#Frame for the top push buttons
mainframe1 = Frame(root, height = 20,width= 250,bg = 'white')
canvas_frame = canv.create_window((4, 4),window=mainframe1,anchor="nw")
b1 = Button(mainframe1,text = "butt 1",width = 24, height = 1,command=lambda: buttonClick(1))
b2 = Button(mainframe1,text = "butt 2",width = 24, height = 1,command=lambda: buttonClick(2))
b3 = Button(mainframe1,text = "butt 3",width = 24, height = 1,command=lambda: buttonClick(3))
b4 = Button(mainframe1,text = "Butt 4",width = 24, height = 1,command=lambda: buttonClick(4))
b1.grid(row=0, column=0, padx=15, pady=10)
b2.grid(row=0, column=1, padx=15, pady=10)
b3.grid(row=0, column=2, padx=15, pady=10)
b4.grid(row=0, column=3, padx=15, pady=10)
#Method to work based on Button click
def buttonClick(num):
if num == 1:
#Creating Frame inside Canvas
mainframe2 = Frame(root, height = 200,width= 250,bg = 'white')
canvas_frame = canv.create_window((80,100),window = mainframe2,anchor="nw")
label = Label(mainframe2,text="frame for butt 1",font=('Courier',-20,'bold'))
#label.grid_rowconfigure(1,weight=1)
#label.columnconfigure(1,weight=1)
label.grid(row=0,column=3)
#Create a Tkinter variable
varmonth = StringVar()
varyear = StringVar()
varmonth.set('January') # set the default option
varyear.set('2017')
#Option Menu for Dropdown list boxes
#For Month
popupMenu = OptionMenu(mainframe2, varmonth, 'January', 'February', 'March', 'April', 'May','June','July','August','Septempber','October','November','December')
Label(mainframe2, text="Select Month",font=('Courier',-15,'bold')).grid(row=2, column=1,sticky='e',padx=15,pady=15)
popupMenu.grid(row=2, column=2,padx=20,sticky="ew")
#For year
popupMenu = OptionMenu(mainframe2, varyear, '2017','2018','2019')
Label(mainframe2, text="Select Year",font=('Courier',-15,'bold')).grid(row=2, column=7,padx=20,pady=25)
popupMenu.grid(row=2, column=8,padx=15,pady=20)
#For Generate Report Button
buttongreport = Button(mainframe2,text = 'Generate Sales report',width = 24, height = 1,command=lambda: buttonClick(gr))
buttongreport.grid(row=8, column=3,columnspan=2, padx=10, pady=10)
elif(num==2):
mainframe3 = Frame(root, height=200, width=250, bg='white')
canvas_frame = canv.create_window((80, 100), window=mainframe3, anchor="nw")
label = Label(mainframe3, text="Frame for butt 2", font=('Courier', -20, 'bold'))
# label.grid_rowconfigure(1,weight=1)
# label.columnconfigure(1,weight=1)
label.grid(row=0, column=3)
# Create a Tkinter variable
varmonth = StringVar()
varyear = StringVar()
varmonth.set('January') # set the default option
varyear.set('2017')
popupMenu = OptionMenu(mainframe3, varmonth, 'January', 'February', 'March', 'April', 'May', 'June', 'July',
'August', 'Septempber', 'October', 'November', 'December')
Label(mainframe3, text="Select Month", font=('Courier', -15, 'bold')).grid(row=2, column=1, sticky='e', padx=15,
pady=15)
popupMenu.grid(row=2, column=2, padx=20, sticky="ew")
popupMenu = OptionMenu(mainframe3, varyear, '2017', '2018', '2019')
Label(mainframe3, text="Select Year", font=('Courier', -15, 'bold')).grid(row=2, column=7, padx=20, pady=25)
popupMenu.grid(row=2, column=8, padx=15, pady=20)
buttongreport = Button(mainframe3, text='Generate Sales report', width=24, height=1,
command=lambda: buttonClick(gr))
buttongreport.grid(row=8, column=3, columnspan=2, padx=10, pady=10)
elif(num==3):
mainframe4 = Frame(root, height=200, width=250, bg='white')
canvas_frame = canv.create_window((80, 100), window=mainframe4, anchor="nw")
label = Label(mainframe4, text=" Frame for Butt 4", font=('Courier', -20, 'bold'))
# label.grid_rowconfigure(1,weight=1)
# label.columnconfigure(1,weight=1)
label.grid(row=0, column=2)
# Create a Tkinter variable
varmonth = StringVar()
varyear = StringVar()
varmonth.set('1: January to April') # set the default option
varyear.set('2017')
popupMenu = OptionMenu(mainframe4, varmonth, '1: January to April', '2: May to August', '3: Septempber to December')
Label(mainframe4, text="Select Quarter", font=('Courier', -15, 'bold')).grid(row=2, column=1, sticky='e', padx=15,
pady=15)
popupMenu.grid(row=2, column=2, padx=20, sticky="ew")
popupMenu = OptionMenu(mainframe4, varyear, '2017', '2018', '2019')
Label(mainframe4, text="Select Year", font=('Courier', -15, 'bold')).grid(row=2, column=7, padx=20, pady=25)
popupMenu.grid(row=2, column=8, padx=15, pady=20)
buttongreport = Button(mainframe4, text='Generate Sales report', width=24, height=1,
command=lambda: buttonClick(gr))
buttongreport.grid(row=8, column=2, padx=10, pady=10)
root.mainloop()
Я написал код процедурным способом. Извините за длинный код.