使用OptionMenu()创建带有子菜单的下拉菜单
发布时间:2024-01-20 08:36:46
OptionMenu()是Tkinter库中的一个小部件,用于创建一个简单的下拉菜单。下面是一个使用OptionMenu()创建带有子菜单的下拉菜单的示例:
import tkinter as tk
from tkinter import messagebox
def on_select(option):
messagebox.showinfo("Selected Option", f"You have selected {option}")
root = tk.Tk()
root.title("Menu Example")
selected_option = tk.StringVar(root)
selected_option.set("Option 1") # 默认选择的选项
options = {
"Option 1": ["Sub Option 1", "Sub Option 2", "Sub Option 3"],
"Option 2": ["Sub Option 4", "Sub Option 5", "Sub Option 6"],
"Option 3": ["Sub Option 7", "Sub Option 8", "Sub Option 9"]
}
option_menu = tk.OptionMenu(root, selected_option, *options.keys(), command=on_select)
option_menu.pack()
sub_option_menu = tk.OptionMenu(root, selected_option, *options[selected_option.get()])
sub_option_menu.pack()
def update_sub_options(option):
sub_option_menu['menu'].delete(0, 'end') # 清空子菜单
for sub_option in options[option]:
sub_option_menu['menu'].add_command(label=sub_option, command=tk._setit(selected_option, sub_option))
selected_option.set(option)
selected_option.trace('w', lambda *args: update_sub_options(selected_option.get()))
root.mainloop()
在这个例子中,我们首先创建一个根窗口,并设置窗口标题为"Menu Example"。然后,我们使用tk.StringVar()创建了一个变量selected_option,用于跟踪用户选择的选项。
接下来,我们定义了一个字典options,其中包含了每个选项及其对应的子选项。默认情况下,我们将selected_option设置为"Option 1"。
然后,我们创建了两个OptionMenu部件:一个用于显示主选项,另一个用于显示子选项。我们通过传递selected_option变量和options的所有主选项来创建主选项的OptionMenu。我们为这个OptionMenu指定了一个命令回调函数on_select,以便在选项更改时显示一个消息框。
接下来,我们创建了一个函数update_sub_options,用于更新子选项菜单。当主选项发生变化时,我们先清空子选项菜单,然后根据新的主选项从options中获取对应的子选项,并逐个添加到子选项菜单中。最后,我们将selected_option设置为新的主选项。
最后,我们使用selected_option的trace方法来跟踪变量的更改,一旦变量更改,我们就调用update_sub_options函数来更新子选项菜单。
最后,我们进入主事件循环,以使窗口保持打开状态。
这个例子展示了如何使用OptionMenu()创建一个带有子菜单的下拉菜单。
