클래스의 사전 속성을 기반으로 kivy에서 드롭 다운 목록을 만들고 싶습니다. 그러나 루프에서 이들을 생성하는 것에 대해서는 Kivy를 혼란스럽게하거나 혼란 스럽습니다. 여기에 내가 가진 무엇을 :Kivy에서 동적으로 Dropdowns 빌드
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