Прежде всего, вам нужно добавить dropdown.open(button)
к функции lista
, чтобы раскрывающийся список открывался при вызове с первой кнопки.
Вам не нужно повторно связывать release
первой кнопки каждый раз, когда вы вызываете lista
.
Вы также должны создать dropdown
один раз, а не при каждом вызове lista
. То же самое касается и его кнопок ...
Но вы должны сохранить ссылку на нее, чтобы вы могли использовать ее внутри функции lista
.
И, наконец, вы должны привязать атрибут on_release
каждой выпадающей кнопки к действию печати.
class Test(App):
def build(self):
box = BoxLayout(orientation='vertical')
label = Label(text='LABEL')
button = Button(text='Selecione', font_size=30, size_hint_y=0.15, on_release=self.lista)
box.add_widget(label)
box.add_widget(button)
self.dropdown = DropDown() # Create the dropdown once and keep a reference to it
self.dropdown.bind(on_select=lambda instance, x: setattr(button, 'text', x))
for index in range(10): # create the buttons once
btn = Button(text='Value %d' % index, size_hint_y=None, height=44,
on_release=lambda btn: print(btn.text)) # bind every btn to a print statement
btn.text = 'Value %d' % index
btn.bind(on_release=lambda btn: self.dropdown.select(btn.text))
self.dropdown.add_widget(btn)
return box
def lista(self, button):
# dropdown = DropDown() <---- DON'T NEED THIS
# button.bind(on_release=self.dropdown.open) <---- DON'T NEED THIS
self.dropdown.open(button) # you need this to open the dropdown
# print(button.text)
Test().run()