lambda функция не работает в цикле
from kivymd.app import MDApp
from kivymd.uix.list import OneLineListItem
import os
KV = '''
ScrollView:
MDList:
id: container
'''
class Test(MDApp):
def build(self):
return Builder.load_string(KV)
def on_start(self):
for i in os.listdir(path='.'):
self.root.ids.container.add_widget(
OneLineListItem(text=i,on_release=lambda i:print(i))
)
Этот код должен отображать все папки и файлы в папке с py файлом. При нажатии на одну из кнопок в списке, функция print должна выводить текст с этой кнопки(i).
Если использовать lambda i:..., то она вернёт None, если i не передавать (lambda a:), то будет выводиться только последний элемент.
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
В on_release первым параметром передавался объект самого элемента, поэтому i=i нужно указывать вторым параметром
Попробуйте:
import os
from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.list import OneLineListItem
KV = '''
ScrollView:
MDList:
id: container
'''
class Test(MDApp):
def build(self):
return Builder.load_string(KV)
def on_start(self):
for i in os.listdir(path='.'):
self.root.ids.container.add_widget(
OneLineListItem(text=i, on_release=lambda item, i=i: print(i))
)
Test().run()