Python 使用Tkinter事件更改标签的外观

Python 使用Tkinter事件更改标签的外观,python,events,user-interface,tkinter,Python,Events,User Interface,Tkinter,上下文:我对Python的还行,但还不熟悉它的所有功能 我正在尝试使用Tkinter构建GUI,我想知道是否可以实现这一点: 如果选择单选按钮,则五个标签中的一个将消失。如果按下另一个单选按钮,则隐藏标签将出现,另一个标签将消失 from Tkinter import * root = Tk() v = IntVar() v.set(0) physVar = ( ("a", 1), ("vi", 2), ("vf", 3), ("t", 4), ("

上下文:我对Python的还行,但还不熟悉它的所有功能

我正在尝试使用Tkinter构建GUI,我想知道是否可以实现这一点: 如果选择单选按钮,则五个标签中的一个将消失。如果按下另一个单选按钮,则隐藏标签将出现,另一个标签将消失

from Tkinter import *
root = Tk()

v = IntVar()
v.set(0)


physVar = (
    ("a", 1),
    ("vi", 2),
    ("vf", 3),
    ("t", 4),
    ("x", 5)
    )


def ShowChoice():
    print physVar[v.get()-1][0]


Label(root, 
    text="Solve for:",
    padx = 5
    ).grid(row=0, column=0, columnspan = 6)

for txt, val in physVar:
    Radiobutton(root,
    text= txt,
    variable = v,
    command=ShowChoice,
    value=val).grid(row=1, column = val)


for txt, val in physVar:
    Label(root,
        text=txt).grid(column = 0, row = val+1)

for txt, val in physVar:
    Entry(root,
        text=txt).grid(column = 1, columnspan = 5, row = val +1)
mainloop()
我想要的是,例如,如果我点击“a”的单选按钮,那么标签“a”和它旁边的条目将消失

from Tkinter import *
root = Tk()

v = IntVar()
v.set(0)


physVar = (
    ("a", 1),
    ("vi", 2),
    ("vf", 3),
    ("t", 4),
    ("x", 5)
    )


def ShowChoice():
    print physVar[v.get()-1][0]


Label(root, 
    text="Solve for:",
    padx = 5
    ).grid(row=0, column=0, columnspan = 6)

for txt, val in physVar:
    Radiobutton(root,
    text= txt,
    variable = v,
    command=ShowChoice,
    value=val).grid(row=1, column = val)


for txt, val in physVar:
    Label(root,
        text=txt).grid(column = 0, row = val+1)

for txt, val in physVar:
    Entry(root,
        text=txt).grid(column = 1, columnspan = 5, row = val +1)
mainloop()

编辑:我可能还包括我试图构建的东西:像这样的运动学方程求解计算器-

好吧,你已经有了一个函数,它在
单选按钮更改时运行,所以很明显,这就是代码需要去的地方

若要更改有关小部件的任何内容,您需要保留对它们的引用,并且由于您正在使它们成为循环,因此我建议将这些引用放在列表中。您还需要将小部件的生成与
grid
调用分开,因为
grid
返回
None

然后,您可以使用
grid\u remove()
从窗口中删除小部件,同时记住它们的放置位置。然后,您可以将此
grid\u remove
调用放入单击单选按钮时运行的函数中,并使用
grid()
将其他调用放回。因为您不知道上次删除的是哪一个,所以您可以在删除需要删除的小部件之前,对所有小部件重新进行网格化。我还删除了第一个
条目
标签
,因为
单选按钮a
是自动选择的

当您在一个
输入框中键入内容,然后选择删除它的
单选按钮,然后再选择另一个,您实际上可以看到小部件从未真正销毁,只是从网格中删除,因为其中的文本仍然存在

请参见此示例:

from Tkinter import *
root = Tk()

v = IntVar()
v.set(0)

physVar = (("a", 0), ("vi", 1), ("vf", 2), ("t", 3), ("x", 4))

def change_radio():
    for i in range(5):
        e[i].grid()
        l[i].grid()
    e[v.get()].grid_remove()
    l[v.get()].grid_remove()

Label(root, text="Solve for:", padx=5).grid(row=0, column=0, columnspan=6)

r=[]
for txt, val in physVar:
    r.append(Radiobutton(root, text= txt, variable = v, command=change_radio, value=val))
    r[-1].grid(row=1, column=val+1)

l=[]
for txt, val in physVar:
    l.append(Label(root, text=txt))
    l[val].grid(column=0, row=val+2)

e=[]
for txt, val in physVar:
    e.append(Entry(root,text=txt))
    e[val].grid(column=1, columnspan=5, row=val+2)

e[0].grid_remove()
l[0].grid_remove()

root.grid_columnconfigure(1, minsize=4)
root.mainloop()