Как в файле .kv реализовать в динамическом цикле for вызов функции

Рейтинг: 0Ответов: 2Опубликовано: 14.02.2023
        #:import Button kivy.uix.button.Button
        <Main>:

            BoxLayout:     
                orientation: "vertical"
    
                BoxLayout:            
                    orientation: "horizontal"
                    size_hint_y: .1
        
                    Button:
                        size_hint_x: .25
                        text:"5"
                        on_press: root.direct()
            
                    Label:
                        text: root.pus
    
                ScrollView:
        
                    do_scroll_x: False
                    do_scroll_y: True

                    GridLayout:
            
                        cols: 1
                        size_hint_y:None
                        height: self.minimum_height
                        on_parent: for i in range(root.len_files): self.add_widget(Button(text = root.list_files[i], size_hint_y=None, height=200, on_release=root.direct()))

Ответы

▲ 0

: BoxLayout: orientation: 'vertical'

    # Создаем кнопки в цикле for
    GridLayout:
        cols: 2
        size_hint_y: None
        height: dp(40) * len(root.button_names)

        # Используем динамический цикл for для создания кнопок
        # и привязываем функцию on_button_press к каждой кнопке
        # через лямбда-функцию
        Button:
            text: button_name
            on_press: lambda button_name=button_name: root.on_button_press(button_name)
        for button_name in root.button_names
▲ 0

Нашел неплохой вариант с помощью lambda-функции

        on_parent: for i in range(root.len_files): self.add_widget(Button(text = root.list_files[i], size_hint_y=None, height=200, on_press=lambda x:root.direct()))