当tk.OptionMenu
等同于CUSTOM
时,下面的代码会显示两个tk.Entry
字段。如果选择的tk.Entry
不是tk.OptionMenu
,会如何隐藏CUSTOM
字段?
例如,如果用户从下拉列表中选择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()
答案 0 :(得分:1)
我通过将field1
和field2
放在函数之外的new_frame
(tk.Frame
)中来实现它。然后我让if语句根据pack
的值确定是pack_forget
还是new_frame
OptionMenu
。不能说这是不是最好的方法,但它现在有效。
import tkinter as tk
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
new_frame = tk.Frame(frame)
field1 = tk.Entry(new_frame)
field2 = tk.Entry(new_frame)
field1.pack()
field2.pack()
def func(*args):
if date_var.get() == 'CUSTOM':
new_frame.pack(side=tk.LEFT)
else:
new_frame.pack_forget()
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()