You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:36:03