KivyMD Python存储数据到JSON文件时出现TypeError如何解决
问题原因
Kivy 框架中,按钮的on_release事件绑定回调函数时,会默认将被点击的按钮实例作为第一个参数传入回调。你定义的save_bio方法只接收1个位置参数self,触发点击时框架会传入self+按钮实例共2个参数,因此触发参数数量不匹配的TypeError。
解决方法
可任选以下两种方案任意一种修改:
- 方案1:给
save_bio方法添加占位参数接收传入的按钮实例(参数不需要调用可以随便命名,用*args也可以兼容多参数场景)
# 仅需修改方法定义,内部逻辑完全不变 def save_bio(self, instance): self.bio = self.root.get_screen('edit_bio').ids.bio_text.text self.store_bio.put('BioInfo', bio=self.bio) self.bio_changer()
如果要兼容更多场景也可以写成:
def save_bio(self, *args): # 内部逻辑不变
- 方案2:绑定回调时用lambda过滤默认传入的参数
修改按钮的on_release绑定逻辑即可,不需要改save_bio定义:
MDRaisedButton( text="OK", md_bg_color=self.theme_cls.primary_color, on_release=lambda btn: self.save_bio() ),
额外注意事项
你当前的KV代码中,Studio页面里展示bio的MDLabel没有设置id: bio,后续执行bio_changer方法时会找不到对应控件报错,需要修改KV代码补全id:
<Studio>: name : 'studio' MDRaisedButton: text : 'Edit Bio' id: edit_profile_pic pos_hint: {'center_x':0.5,'center_y':0.5} user_font_size: "25sp" on_release : app.edit_bio_dialog() MDLabel: id: bio # 补全这行id定义 text:'Bio' font_style: 'Subtitle1' halign: 'center' pos_hint : {'center_x':0.255,'center_y':0.538}
内容的提问来源于stack exchange,提问作者Kusal Darshana
相关产品推荐
相关产品推荐

