如何刷新或销毁在 tkinter python 画布中创建的框架?

赫曼斯·赛·雷迪

我有一个 GUI,我在其中创建了一个画布,并且在其中创建了两个框架并使用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()

我已经以程序方式编写了代码。对不起,代码太长了。

acw1668

canvas.delete(...)每当单击按钮时,您都可以使用删除当前显示的框架。但是你需要声明一个全局变量来保存当前显示的帧:

open_frame = None

然后修改buttonClick(...)

def buttonClick(num):
    global open_frame
    if open_frame:
        canv.delete(open_frame)
    if num == 1:
        ...
        open_frame = canv.create_window(...)
        ...
    elif num == 2:
        ...
        open_frame = canv.create_window(...)
        ...
    elif num == 3:
        ...
        open_frame = canv.create_window(...)
        ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python Tkinter刷新画布

来自分类Dev

Python Tkinter刷新画布

来自分类Dev

销毁不同框架python tkinter中的标签

来自分类Dev

在Tkinter Python中创建全局画布

来自分类Dev

如何使用python 3.8在tkinter中的画布中创建滚动条

来自分类Dev

如何使用Tkinter在python中刷新标签

来自分类Dev

如何销毁在特定设备上创建的流?

来自分类Dev

如何创建具有类似按钮功能的 Python tkinter 框架?

来自分类Dev

Python Tkinter如何在画布中显示文本

来自分类Dev

如何刷新Python TKINTER选项卡中的内容?

来自分类Dev

如何在Python的tkinter mainloop()中刷新字典?

来自分类Dev

如何在tkinter和python中刷新标签

来自分类Dev

Python tkinter 在画布上创建对象

来自分类Dev

python tk tkinter在我的可滚动框架中无法承受多个画布

来自分类Dev

tkinter画布重复创建新框架

来自分类Dev

Tkinter Python销毁标签

来自分类Dev

python tkinter销毁顶层

来自分类Dev

如何在python tkinter中重叠窗口小部件/框架?

来自分类Dev

在tkinter中创建框架

来自分类Dev

Python Tkinter:如何创建顶级窗口并销毁前一个窗口?

来自分类Dev

如何在 tkinter 画布上创建文本并更改画布中的文本?

来自分类Dev

在Python3 / tkinter中刷新画布类似于MATLAB“保持”

来自分类Dev

在Tkinter 8.5和Python 3.3中单击子窗口的红色X时,如何销毁父窗口

来自分类Dev

Python Tkinter画布几何

来自分类Dev

Python tkinter - 如何创建一个在画布上滚动的实时 xy 图

来自分类Dev

销毁在Java中不起作用

来自分类Dev

画布内的 Python Tkinter 画布

来自分类Dev

Python Tkinter框架对齐

来自分类Dev

Python Tkinter框架对齐

Related 相关文章

热门标签

归档