我正在使用 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()
uj5u.com熱心網友回復:
您沒有設定默認選項,因此 tkinter 從字典中取出第一個選項 A,并認為這是用戶尚未選擇任何內容時應顯示的內容。為避免這種情況,您可以在 ttk.OptionMenu 中設定一個默認選項,如下所示:
optionmenu = ttk.OptionMenu(root, variable, default_option, *options)
所以你的 OptionMenu 看起來像這樣:
optionmenu_a = ttk.OptionMenu(window, first_category, 'A', *dict.keys())
取而代之的是:
optionmenu_a = ttk.OptionMenu(window, first_category, *dict.keys())
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/365154.html
標籤:Python 特金特 选项菜单 tkinter.optionmenu
