python - Tkinter 基于 OptionMenu 值打包条目小部件,否则 pack_forget

标签 python tkinter trace optionmenu tkinter-entry

tk.OptionMenu相当于CUSTOM时,下面的代码显示两个tk.Entry字段。选择非 CUSTOMtk.OptionMenu 后,如何隐藏 View 中的 tk.Entry 字段?

例如,如果用户从下拉列表中选择CUSTOM,下面的代码将显示两个字段,但如果用户选择另一个选项,我想删除从 View 中添加的两个字段如果再次从下拉列表中选择CUSTOM,则会再次显示它们。从某种意义上说,切换它们。

我的研究发现了pack_forget销毁trace。我似乎无法弄清楚。

tkinter

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()

最佳答案

我通过将 field1field2 放入 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/

相关文章:

python - 随机 "[Errno -2] Name or service not known"错误

python - 如何使用 '/' 设计 Flask URL 路径

delphi - 从 FireDAC 连接捕获 mysql_real_query

common-lisp - 对非我定义的函数使用跟踪

.net - 灵活的跟踪查看器(用于 etl 文件和运行时跟踪)

python - Pylab - 'module' 对象没有属性 'Figure'

python - memcached 可以有效处理多大的数据?

python - 使用 Tkinter 和 Python 将同一框架内的两个不同类插入笔记本时仍然存在问题

python - Virtualbox Ubuntu pygame.display.set_mode 在交互式 python 中的行为与解释文件时的行为不同

python - 如何在 tkinter 中出现标签之前添加时间延迟?