上下文:我对 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”及其旁边的条目将会消失。
编辑:我可能还包括我正在尝试构建的内容:像这样的运动学方程求解计算器 - http://planetcalc.com/981/
最佳答案
嗯,您已经有了一个在 Radiobutton
更改时运行的函数,所以显然这就是代码需要放置的地方。
要更改有关小部件的任何内容,您需要保留对它们的引用,并且由于您正在循环中创建它们,因此我建议将这些引用放入列表中。您还需要将小部件的制作和 grid
调用分开,因为 grid
返回 None
。
然后您可以使用grid_remove()
从窗口中删除小部件,同时记住它们的放置位置。然后,您可以将此 grid_remove
调用放入单击单选按钮时运行的函数中,并仅使用 grid()
将其他调用放回原处。因为您不知道上次删除的是哪一个,所以您可以在删除需要删除的小部件之前重新网格化所有小部件。我还删除了第一个 Entry
和 Label
,因为 Radiobutton a
是自动选择的。
当您在其中一个 Entry
框中输入内容,然后选择将其删除的 Radiobutton
并再次选择另一个时,您实际上可以看到该小部件从未真正被销毁但只是从网格中删除,因为其中的文本仍然存在。
请参阅此示例:
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()
关于python - 使用 Tkinter 事件更改标签的外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27188926/