使用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
相关产品推荐
相关产品推荐

