首页 > 解决方案 > 如何将参数传递给 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 函数,但是当我单击 Button 时,它再次出现错误lambda takes zero positional argument but one was given。我使用 lambda 之类的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 被某个类中的某个其他小部件使用

标签: pythonfunctionbuttonkivy

解决方案


您传递给的函数on_release将释放的实例作为其第一个(也是唯一的显式)参数传递。

因此,如果您有一个如您所描述的那样声明的函数def on_release_func(self,instance,something),则应将其绑定为.bind(on_release=lambda instance: self.on_release_func(instance, your_parameter)).


推荐阅读