[英]Python 3.4 tkinter, not clearing frame after selecting a option from a menu
这是我制作的一个小程序,用于查找不同四边形的区域,当我从下拉菜单中选择一个选项时,它将起作用。 但是当我从正方形切换到梯形时,我得到了:
我想清除窗口,仅保留选定的选项。
这是代码:
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.