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

Kivy报错:SignupScreen出现'str' object has no attribute 'text'求解

问题根因

  1. AttributeError: 'str' object has no attribute 'text'是因为Kivy的Screen类本身就有内置的name属性,用于标识页面路由名称。你在Python代码里自定义了同名的ObjectProperty,同时在KV代码里给SignupScreen的内置name属性赋值为字符串"signup",导致自定义的绑定逻辑被覆盖,self.name变成了字符串类型,自然没有text属性。
  2. 你后续修改submit方法增加text参数的操作本身不符合问题场景,KV代码里调用root.submit()没有传入参数,自然会触发TypeError: submit() missing 1 required positional argument: 'text'报错,这个修改无需保留。

修复步骤

1. 修改Python代码的SignupScreen类

将自定义的姓名输入框绑定属性重命名,避免和Screen内置属性冲突:

class SignupScreen(Screen):
    # 把原来的name = ObjectProperty(None)改成full_name,避免和内置name属性冲突
    full_name = ObjectProperty(None)
    username = ObjectProperty(None)
    password = ObjectProperty(None)

    def submit(self):
        # 把self.name.text替换为self.full_name.text
        if self.full_name.text != "" and self.username.text != "" and self.password.text != "": 
            # 参数里的self.name.text也替换为self.full_name.text
            added = db.add_user(self.username.text, self.password.text, self.full_name.text)
            if added == 1:
                self.reset()
                wm.current = "login"
            elif added == 2:
                PassTooShort()
            else:
                AccAlreadyExists()
        else:
            invalidForm()

    def login(self):
        self.reset()
        wm.current = "login"

    def reset(self):
        self.username.text = ""
        self.password.text = ""
        # 清空操作也替换为self.full_name.text
        self.full_name.text = ""

2. 修改KV代码的SignupScreen属性绑定

把姓名输入框的绑定对象改成你重命名后的full_name属性:

<SignupScreen>:
    name: "signup" # 这里是Screen内置的路由name属性,保留不动
    full_name: name # 把原来的n: name改成full_name,绑定到id为name的输入框
    username: username
    password: passw
    # 剩余KV代码无需改动

修改完成后两个报错都会消失,输入校验逻辑可以正常运行。

内容的提问来源于stack exchange,提问作者Jolin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:42:03