1
当tk.OptionMenu
等于CUSTOM
时,下面的代码显示两个tk.Entry
字段。如果选择而非CUSTOM
,如何在视图中隐藏tk.Entry
字段?基于OptionMenu值的Tkinter pack条目小部件,pack_forget否
例如,下面的代码显示两个字段,如果用户从下拉菜单中选择CUSTOM
,但如果用户去选择另一个选项,我想删除从视图中添加的两个字段,并再次显示它们如果CUSTOM
是再次从下拉列表中选择。从某种意义上说,切换它们。
我的研究已经转向了pack_forget,破坏,跟踪。我似乎无法弄清楚。
import tkinter as tk
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
def func(*args):
if date_var.get() == 'CUSTOM':
new_frame = tk.Frame(frame)
new_frame.pack(side=tk.LEFT)
field1 = tk.Entry(new_frame)
field2 = tk.Entry(new_frame)
field1.pack()
field2.pack()
else:
try:
new_frame.destroy()
except:
pass
date_var = tk.StringVar()
date_var.trace('w', func)
date_var.set('LAST_10_DAYS')
date_options = ['CUSTOM', 'LAST_10_DAYS', 'LAST_50_DAYS', 'LAST_10_MILLION_YEARS']
date = tk.OptionMenu(frame, date_var, *date_options)
date.pack(pady=10)
root.mainloop()
当您尝试'pack_forget'或'destroy'时会发生什么?我猜你会得到一个错误。它说什么?你能从中学到什么? –
我没有收到错误消息。每次选择“CUSTOM”时,上面的代码将打包“field1”和“field2”。这在逻辑上是合理的。我对理解(对tkinter而言是新手)的主要差距在于理解操作的位置。我有一个解决方案工作。我现在将它发布。顺便说一句,你在这里的代码示例是非常有用的。你的回答几乎出现在我做的每一个tkinter搜索中! – Jarad
其实在你的代码中有一个异常,如果你用'this except'除了Exception',除了Exception,e:print e',它会打印异常消息。 'new_frame'对函数是本地的。 – Ejaz