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

使用ScreenManager时Kivy无法获取MDTextField输入的问题求助

解决ScreenManager环境下获取MDTextField输入的KeyError问题

这个问题我之前也碰到过,核心原因是你搞混了ScreenManager和子Screen的ids作用域:

  • 单独测试AddWindow时,self.root指向的就是AddWindow本身,所以能直接通过self.root.ids["account_link"]拿到控件;
  • 但把AddWindow放到ScreenManager里后,self.root变成了ScreenManager实例,它的ids字典里只包含直接属于它的控件,并不包含子Screen内部的account_link,所以会抛出KeyError: 'account_link'。

两种可行的解决方案:

方案1:如果按钮在AddWindow内部(最推荐)

直接用self(也就是AddWindow实例)来访问自身的ids,代码改成:

data = self.ids.account_link.text

或者用字典索引的写法也可以:

data = self.ids["account_link"].text

方案2:如果按钮不在AddWindow内部(比如在其他Screen或全局区域)

先通过ScreenManager的get_screen()方法获取AddWindow实例,再访问它的ids:

# 先拿到AddWindow实例
add_window = self.root.get_screen("add")
# 再获取输入内容
data = add_window.ids.account_link.text

这里的"add"是你在Kivy代码里给AddWindow设置的name属性,完全匹配才能拿到对应的Screen。

验证你的Kivy代码

你的AddWindow定义是正确的,id: account_link已经正确绑定到MDTextField,只要调整获取输入的代码逻辑就能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:27:38