我正在使用 Tkinter 构建具有一些条件逻辑的表单。有两个选项菜单,第二个中可用的选项取决于用户在第一个中的选择。然而,由于某种原因,一旦用户选择了不同的选项,第一个菜单中的默认选项就会消失。例如,如果用户在下面的 reprex 中选择了类别 B,他们可以更改为 C 或返回 B,但不能更改回 A。
有人可以帮我理解为什么会这样吗?
from tkinter import *
from tkinter import ttk
def update_options(self, *args):
list = dict[first_category.get()]
second_category.set(list[0])
menu = optionmenu_b['menu']
menu.delete(0, 'end')
for item in list:
menu.add_command(label=item, command=lambda selection=item: second_category.set(selection))
window = Tk()
style = ttk.Style(window)
style.theme_use("aqua")
dict = {'A':
['A1', "A2"],
'B':
['B1', 'B2'],
'C':
['C1', 'C2']}
first_category = StringVar()
second_category = StringVar()
optionmenu_a = ttk.OptionMenu(window, first_category, *dict.keys())
optionmenu_b = ttk.OptionMenu(window, second_category, '')
for item in dict['A']:
optionmenu_b['menu'].add_command(label=item, command=lambda selection=item: second_category.set(selection))
first_category.trace('w', update_options)
optionmenu_a.grid(row = 0, column = 1)
optionmenu_b.grid(row = 1, column = 1)
ttk.Label(window, text = "First Label:").grid(row = 0, column = 0)
ttk.Label(window, text = "Second Label:").grid(row = 1, column = 0)
window.title('Options')
window.geometry("500x500+10+10")
window.mainloop()