Python 3.4 tkinter, not clearing frame after selecting a option from a menu
<p>This is a little program I made to find the area of different quadrilaterals, when I select a option from the drop down menu it works. But when I switch from let's say square to trapezium, I get this:</p>

<p><img src="http://i.stack.imgur.com/qROin.png" alt="2"></p>

<p>I want to clear the window leaving only the selected option.</p>

<p><strong>Here is the code:</strong></p>

<pre><code>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()
</code></pre>

<p>Thank you to anyone that can help. </p>

<p>When a different option from the drop down menu is selected you need to delete what you had before, then create the new widgets</p>

<p>In each of your functions where you make a shape, you need to first destroy the widgets, then create the new ones</p>

<p><strong>I have fixed the code:</strong></p>

<pre><code>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()
</code></pre>

<p>This code works but it could be a lot shorter and more efficient</p>

<p>Its good practice to put similar code into one separate function instead of copying it 4 times</p>

python tkinter