当tk.OptionMenu
相当于CUSTOM
时,下面的代码显示两个tk.Entry
字段。选择非 CUSTOM
的 tk.OptionMenu
后,如何隐藏 View 中的 tk.Entry
字段?
例如,如果用户从下拉列表中选择CUSTOM
,下面的代码将显示两个字段,但如果用户选择另一个选项,我想删除从 View 中添加的两个字段如果再次从下拉列表中选择CUSTOM
,则会再次显示它们。从某种意义上说,切换它们。
我的研究发现了pack_forget、销毁、trace。我似乎无法弄清楚。
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()
最佳答案
我通过将 field1
和 field2
放入 new_frame
(tk.Frame
) < strong>函数之外。然后,我让 if 语句根据 OptionMenu
中的值确定是 pack
还是 pack_forget
new_frame
。不能说这是否是最好的方法,但目前有效。
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()
关于python - Tkinter 基于 OptionMenu 值打包条目小部件,否则 pack_forget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39092707/