可以使用 HTML optgroup-style 组选项在 tkinter/ttk 中创建下拉菜单吗?
Possible to create a dropdown menu in tkinter/ttk with HTML optgroup-style grouping of options?
我想使用数组字典中的 tkinter 创建一个下拉菜单,我希望键代表菜单选项的 higher-level 组,值数组中的字符串代表可用的实际选项给用户。换句话说,单击下拉菜单时,下拉菜单应该类似于在 HTML 中使用 optgroup 标记创建的下拉菜单,其中既有不可选择的标签作为组标题,也有可选择的标签作为实际选项。
我的字典看起来是这样的:
ingredients = {
"Herbs":
["basil",
"oregano",
"thyme"],
"Meats":
["chicken",
"beef",
"venison",],
"Spices":
["pepper",
"salt",
"chilli powder",
"cumin"]
}
用户应该能够从下拉列表中选择 'basil'、'beef'、'salt' 等,但不能选择 'Herbs'、'Meats' 或 'Spices',它应该只作为不同成分组的静态标题出现。这可能仅使用 tkinter/ttk?
可能这至少会对你有所帮助
from tkinter import *
root = Tk()
root.title("Tk dropdown example")
mainframe = Frame(root)
mainframe.grid()
tkvar = StringVar(root)
ingredients = {
"Herbs":
["basil",
"oregano",
"thyme"],
"Meats":
["chicken",
"beef",
"venison",],
"Spices":
["pepper",
"salt",
"chilli powder",
"cumin"]
}
c=[]
for k,v in ingredients.items():
c.append(k)
c.extend(v)
ddl = OptionMenu(mainframe, tkvar, *c)
Label(mainframe, text="Choose a dish").grid(row = 1, column = 1)
ddl.grid(row = 2, column =1)
for i in ingredients:
ddl['menu'].entryconfigure(i, state = "disabled",font=('arial italic',11))
root.mainloop()
我想使用数组字典中的 tkinter 创建一个下拉菜单,我希望键代表菜单选项的 higher-level 组,值数组中的字符串代表可用的实际选项给用户。换句话说,单击下拉菜单时,下拉菜单应该类似于在 HTML 中使用 optgroup 标记创建的下拉菜单,其中既有不可选择的标签作为组标题,也有可选择的标签作为实际选项。
我的字典看起来是这样的:
ingredients = {
"Herbs":
["basil",
"oregano",
"thyme"],
"Meats":
["chicken",
"beef",
"venison",],
"Spices":
["pepper",
"salt",
"chilli powder",
"cumin"]
}
用户应该能够从下拉列表中选择 'basil'、'beef'、'salt' 等,但不能选择 'Herbs'、'Meats' 或 'Spices',它应该只作为不同成分组的静态标题出现。这可能仅使用 tkinter/ttk?
可能这至少会对你有所帮助
from tkinter import *
root = Tk()
root.title("Tk dropdown example")
mainframe = Frame(root)
mainframe.grid()
tkvar = StringVar(root)
ingredients = {
"Herbs":
["basil",
"oregano",
"thyme"],
"Meats":
["chicken",
"beef",
"venison",],
"Spices":
["pepper",
"salt",
"chilli powder",
"cumin"]
}
c=[]
for k,v in ingredients.items():
c.append(k)
c.extend(v)
ddl = OptionMenu(mainframe, tkvar, *c)
Label(mainframe, text="Choose a dish").grid(row = 1, column = 1)
ddl.grid(row = 2, column =1)
for i in ingredients:
ddl['menu'].entryconfigure(i, state = "disabled",font=('arial italic',11))
root.mainloop()