Как вы можете передать параметры функциям привязки кнопки kivy

#python #function #button #kivy

#python #функция #кнопка #kivy

Вопрос:

На самом деле я пытался добавить параметр в метод привязки кнопки kivy, который похож def on_release_func(self,instance,something) на то, где что-то ссылается на любой параметр.Теперь функция привязки кнопки MDRectangleFlatButton.bind(on_release = self.on_release_func(my_parameter)) выдает мне ошибку on_release_func() missing one required positional argument 'something' . Я попытался использовать лямбда-функцию, но когда я нажимаю на кнопку, она снова выдает ошибку lambda takes zero positional argument but one was given .. Я использовал лямбда-выражение, подобное MDRectangleFlatButton.bind(on_release = lambda : self.on_release_func(my_parameter))

Есть идеи, как я могу решить свою проблему

пример кода

 class Myapplin(MDApp):

    def any_function(self):
        self.card_imgs_box = BoxLayout()
        self.img_disp_btn = MDFillRoundFlatButton(text='Img 1')

        id_btn = int(self.img_disp_btn.text[-1]) - 1

        self.img_disp_btn.bind(on_release=lambda: self.display_btn_img(id_btn))
        self.card_imgs_box.add_widget(self.img_disp_btn)


    def display_btn_img(self,instance,id):
        return id*id
    def build(self):
        return something()

Myapplin().run()
  

Здесь функция находится в классе MDApp. эта функция any_function используется каким-либо другим виджетом в классе something

Ответ №1:

Функция, которую вы передаете on_release , будет иметь экземпляр, который будет выпущен, переданный в качестве первого (и единственного явного) аргумента.

Поэтому, если у вас есть функция, объявленная как def on_release_func(self,instance,something) , как вы описываете, вы должны привязать ее как .bind(on_release=lambda instance: self.on_release_func(instance, your_parameter)) .

Комментарии:

1. Спасибо за твой быстрый ответ, брат, это сработало как шарм