繁体   English   中英

Python 3.4 tkinter,从菜单中选择一个选项后未清除框架

[英]Python 3.4 tkinter, not clearing frame after selecting a option from a menu

这是我制作的一个小程序,用于查找不同四边形的区域,当我从下拉菜单中选择一个选项时,它将起作用。 但是当我从正方形切换到梯形时,我得到了:

2

我想清除窗口,仅保留选定的选项。

这是代码:

from tkinter import *

def square():
    ment = IntVar()
    def mhello():
        mtext = ment.get()
        mtext *= 2
        mlabel2 = Label(mGui, text=mtext).pack()

    mlabel = Label(mGui, text="Square").pack()
    mbutton = Button(mGui, text= "Submit", command = mhello). pack()

    nEntry = Entry(mGui, textvariable=ment).pack()
def rectangle():
    oneMent = IntVar()
    twoMent = IntVar()
    def mhello():
        oneMtext = oneMent.get()
        twoMtext = twoMent.get()
        mtext = 0
        mtext = oneMtext * twoMtext
        mlabel2 = Label(mGui, text=mtext).pack()

    mlabel = Label(mGui, text="Rectangle/Parallelogram").pack()

    mbutton = Button(mGui, text= "Submit", command = mhello). pack()

    oneEntry = Entry(mGui, textvariable=oneMent).pack()
    twoEntry = Entry(mGui, textvariable=twoMent).pack()

def trapezium():
    oneMent = IntVar()
    twoMent = IntVar()
    threeMent = IntVar()
    def mhello():
        oneMtext = oneMent.get()
        twoMtext = twoMent.get()
        threeMtext = threeMent.get()
        mtext = 0
        mtext = oneMtext + twoMtext
        mtext /= 2
        mtext *= threeMtext

        mlabel2 = Label(mGui, text=mtext).pack()

    mlabel = Label(mGui, text="Trapezium").pack()

    mbutton = Button(mGui, text= "Submit", command = mhello). pack()

    oneEntry = Entry(mGui, textvariable=oneMent).pack()
    twoEntry = Entry(mGui, textvariable=twoMent).pack()
    threeEntry = Entry(mGui, textvariable=threeMent).pack()

def rhombus():
    oneMent = IntVar()
    twoMent = IntVar()
    def mhello():
        oneMtext = oneMent.get()
        twoMtext = twoMent.get()
        mtext = 0
        mtext = oneMtext * twoMtext
        mtext /= 2

        mlabel2 = Label(mGui, text=mtext).pack()

    mlabel = Label(mGui, text="Rhombus").pack()

    mbutton = Button(mGui, text= "Submit", command = mhello). pack()

    oneEntry = Entry(mGui, textvariable=oneMent).pack()
    twoEntry = Entry(mGui, textvariable=twoMent).pack()

def restart():
    mGui.destroy()


mGui = Tk()

mGui.geometry("450x450+500+300")
mGui.title("Square Area Finder")
mHomeLabel = Label(mGui, text="Use the drop down menu to select the quadrilateral you want to find the area of.").pack()
menu = Menu(mGui)
mGui.config(menu=menu)
file =Menu(menu)
file.add_command(label="Square", command=square)
file.add_command(label="Rectangle/Parallelogram", command=rectangle)
file.add_command(label="Trapezium", command=trapezium)
file.add_command(label="Rhombus", command=rhombus)
file.add_separator()
file.add_command(label="Quit", command=restart)
menu.add_cascade(label="Options", menu=file)

mGui.mainloop()

多谢能帮助您的人。

从下拉菜单中选择其他选项后,您需要删除之前的内容,然后创建新的小部件

在您制作形状的每个函数中,首先需要销毁小部件,然后创建新的小部件。

我已经修复了代码:

from tkinter import *

global widgets # this list will contain widgets to be deleted
widgets = []
def square():
    global widgets
    for widget in widgets[:]:
        widget.destroy()
        widgets.remove(widget)

    ment = IntVar()
    def mhello():
        mtext = ment.get()
        mtext *= 2
        mlabel2 = Label(mGui, text=mtext)

    mlabel = Label(mGui, text="Square")
    mbutton = Button(mGui, text= "Submit", command = mhello)

    nEntry = Entry(mGui, textvariable=ment)
    widgets = widgets[:] + [mlabel, mbutton, nEntry] # destroy these later

    for widget in widgets:
        widget.pack() # pack them afterwards

def rectangle():
    global widgets
    for widget in widgets[:]:
        widget.destroy()
        widgets.remove(widget)

    oneMent = IntVar()
    twoMent = IntVar()
    def mhello():
        oneMtext = oneMent.get()
        twoMtext = twoMent.get()
        mtext = 0
        mtext = oneMtext * twoMtext
        mlabel2 = Label(mGui, text=mtext).pack()

    mlabel = Label(mGui, text="Rectangle/Parallelogram")

    mbutton = Button(mGui, text= "Submit", command = mhello)

    oneEntry = Entry(mGui, textvariable=oneMent)
    twoEntry = Entry(mGui, textvariable=twoMent)
    widgets = widgets + [mlabel, mbutton, oneEntry, twoEntry] # destroy these later
    for widget in widgets:
        widget.pack() # pack them afterwards

def trapezium():
    global widgets
    for widget in widgets[:]:
        widget.destroy()
        widgets.remove(widget)

    oneMent = IntVar()
    twoMent = IntVar()
    threeMent = IntVar()
    def mhello():
        oneMtext = oneMent.get()
        twoMtext = twoMent.get()
        threeMtext = threeMent.get()
        mtext = 0
        mtext = oneMtext + twoMtext
        mtext /= 2
        mtext *= threeMtext

        mlabel2 = Label(mGui, text=mtext).pack()

    mlabel = Label(mGui, text="Trapezium")

    mbutton = Button(mGui, text= "Submit", command = mhello)

    oneEntry = Entry(mGui, textvariable=oneMent)
    twoEntry = Entry(mGui, textvariable=twoMent)
    threeEntry = Entry(mGui, textvariable=threeMent)
    widgets = widgets + [mlabel, mbutton, oneEntry, twoEntry, threeEntry] # destroy these later
    for widget in widgets:
        widget.pack() # pack them afterwards

def rhombus():
    global widgets
    for widget in widgets[:]:
        widget.destroy()
        widgets.remove(widget)

    oneMent = IntVar()
    twoMent = IntVar()
    def mhello():
        oneMtext = oneMent.get()
        twoMtext = twoMent.get()
        mtext = 0
        mtext = oneMtext * twoMtext
        mtext /= 2

        mlabel2 = Label(mGui, text=mtext).pack()

    mlabel = Label(mGui, text="Rhombus")

    mbutton = Button(mGui, text= "Submit", command = mhello)

    oneEntry = Entry(mGui, textvariable=oneMent)
    twoEntry = Entry(mGui, textvariable=twoMent)
    widgets = widgets + [mlabel, mbutton, oneEntry, twoEntry] # destroy these later
    for widget in widgets:
        widget.pack() # pack them afterwards

def restart():
    mGui.destroy()


mGui = Tk()

mGui.geometry("450x450+500+300")
mGui.title("Square Area Finder")
mHomeLabel = Label(mGui, text="Use the drop down menu to select the quadrilateral you want to find the area of.").pack()
menu = Menu(mGui)
mGui.config(menu=menu)
file =Menu(menu)
file.add_command(label="Square", command=square)
file.add_command(label="Rectangle/Parallelogram", command=rectangle)
file.add_command(label="Trapezium", command=trapezium)
file.add_command(label="Rhombus", command=rhombus)
file.add_separator()
file.add_command(label="Quit", command=restart)
menu.add_cascade(label="Options", menu=file)

mGui.mainloop()

此代码有效,但可能会更短,更有效

将相似的代码放入一个单独的函数中而不是将其复制4次的优良作法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM