Kivy点击按钮报错on_press_button()缺少必填位置参数'instance'
错误产生原因
该错误由Kivy事件回调的参数传递规则与代码写法不匹配导致:
- Python代码中定义的
on_press_button是whatever_two类的成员方法,除Python类方法默认隐式传入的self参数外,还定义了instance形参用于接收触发点击事件的按钮对象,方法内部也依赖instance.text读取按钮文本。 - kv布局文件中写的回调为
on_press: root.on_press_button():带括号的写法属于主动触发函数调用,Kivy不会自动为该调用补全触发事件的按钮实例参数,最终方法调用时缺少instance对应的实参,触发缺少位置参数的报错。
修复方案
两种修复方式任选其一即可:
- 方式一:在kv的回调调用中手动传入按钮实例。kv语法中,Button组件作用域内的
self指代当前按钮对象,将按钮的回调配置修改为:
Button: text: 'Click me' on_press: root.on_press_button(self)
- 方式二:去掉回调后的括号,直接绑定方法引用,由Kivy自动完成参数传递。将按钮的回调配置修改为:
Button: text: 'Click me' on_press: root.on_press_button
该写法是Kivy默认的事件绑定写法,事件触发时Kivy会自动调用绑定的方法,并将触发事件的Button实例作为参数传入,完全匹配现有方法的形参定义。
补充:两种写法的适用场景有区别:带括号的写法支持自定义传入额外参数,不带括号的写法只能接收Kivy自动传入的事件触发实例,按需选择即可。
内容的提问来源于stack exchange,提问作者IC CO
相关产品推荐
相关产品推荐

