Как использовать лямбду в kivy bind python? - PullRequest
0 голосов
/ 13 апреля 2020

Я учусь использовать выпадающий объект с примером документации.

from kivy.uix.dropdown import DropDown
from kivy.uix.button import Button
from kivy.base import runTouchApp

dropdown = DropDown()
for index in range(10):
    btn = Button(text='Value %d' % index, size_hint_y=None, height=44)

    btn.bind(on_release=lambda btn: dropdown.select(btn.text))

    dropdown.add_widget(btn)
mainbutton = Button(text='Hello', size_hint=(None, None))
mainbutton.bind(on_release=dropdown.open)

dropdown.bind(on_select=lambda instance, x: setattr(mainbutton, 'text', x))
runTouchApp(mainbutton)

Я знаю, что это лямбда-функция, имя ее аргументов должно быть произвольным, как в обычной функции, но в первом случае аргумент «btn» относится к экземпляру Button, в котором он объявлен (для извлечения текста оттуда).

Второе вхождение лямбды кажется мне еще более редким, поскольку оно имеет два аргумента "instance" и "X", но для setattr используется только "X", мне удалось вывести этот аргумент, и это

...