我想基於類的字典屬性在kivy中創建下拉列表。但是在循環中創建這些內容或者讓基維感到困惑,或者我只是感到困惑。下面是我有:在Kivy中動態構建下拉列表
for main, ingrediants in self.ingrediants.items():
print main, ingrediants
dropdown = DropDown()
for ingrediant in ingrediants:
btn = Button(text=ingrediant, size_hint_y=None, height=44)
btn.bind(on_release=lambda btn: dropdown.select(btn.text))
dropdown.add_widget(btn)
trigger = Button(text=main, size_hint=(None, None))
trigger.bind(on_release=dropdown.open)
dropdown.bind(on_select=lambda instance, x: setattr(trigger, 'text', x))
self.toolbar.dropdown_bar.add_widget(trigger)
這裏是我的財產的樣子:
ingrediants = DictProperty(
{
'Milk': ['Whole Milk', 'Soy', 'Creamer'],
'Coffee': ['Drip Coffee', 'Espresso', 'Pour Over'],
'Sugar': ['Sugar', 'Simple Syrup', 'Raw Sugar'],
}
)
當此呈現,下拉欄看起來是正確的,三個按鈕,不過,牛奶一個不觸發下拉列表中,咖啡觸發它的下拉菜單,但選中後,更改糖按鈕的文本,第三個按鈕正常工作,觸發下拉菜單並更改選定按鈕上的文本。
我覺得我只是在做我的循環有問題。但是,也許你不能聲明這樣的下拉菜單?謝謝。編輯:這是我不得不做的工作。
dropdowns = {}
for main, ingrediants in self.ingrediants.iteritems():
dropdowns[main] = DropDown()
for ingrediant in ingrediants:
btn = Button(text=ingrediant, size_hint_y=None, height=44)
btn.bind(on_release=lambda btn=btn, dropdown=dropdowns[main]: dropdown.select(btn.text))
dropdowns[main].add_widget(btn)
trigger = Button(text=main, size_hint=(None, 1))
trigger.bind(on_release=dropdowns[main].open)
dropdowns[main].bind(on_select=lambda instance, x, trigger=trigger: setattr(trigger, 'text', x))
self.toolbar.dropdown_bar.add_widget(trigger)
非常感謝!這確實解決了我的問題。 – aeikenberry