如何从KivyMD的MDTextField获取文本?解决LoginScreen中文本获取失败及self.root.ids为空问题
解决KivyMD无法获取LoginScreen中MDTextField文本的问题
你遇到的核心问题是self.root.ids为空字典,导致无法正确访问目标输入框。这背后是Kivy id规则的使用误区,我来一步步帮你理清并解决:
问题根源
在你的kv文件里,<LoginScreen>规则内的id: login是LoginScreen类内部的标识符,并不是ScreenManager子元素的id。而ScreenManager的ids字典只会收录直接在它下面显式设置了id的子组件,所以self.root.ids自然是空的。
另外,即使拿到了LoginScreen实例,你也需要通过它自身的ids字典访问内部的MDTextField——因为master_password是LoginScreen内部组件的id,属于LoginScreen的ids集合,不是LoginScreen实例的直接属性。
解决方案一:通过Screen的name获取实例(推荐,无需修改kv文件)
你已经给LoginScreen设置了name: 'login',可以直接用ScreenManager的get_screen()方法获取该Screen实例,再访问它的ids字典:
修改你的verify()方法:
def verify(self): # 通过screen名称获取LoginScreen实例 login_screen = self.root.get_screen('login') # 获取MDTextField的文本内容 master = login_screen.ids.master_password.text print(master) # 打印内容验证是否获取成功
解决方案二:给ScreenManager下的LoginScreen实例添加id
如果你更习惯用id访问组件,可以修改kv文件,给ScreenManager里的LoginScreen实例加上id:
ScreenManager: LoginScreen: id: login_screen # 给Screen实例添加全局id VaultScreen: <LoginScreen>: name: 'login' MDTextField: id: master_password # 其他属性保持不变...
然后修改verify()方法:
def verify(self): master = self.root.ids.login_screen.ids.master_password.text print(master)
验证方式
不管用哪种方法,点击"Unlock"按钮后,控制台都会输出你输入的密码(虽然输入框设置了password: True隐藏显示,但获取到的是真实输入内容),以此确认是否成功获取文本。
内容的提问来源于stack exchange,提问作者ArturoMunn
相关产品推荐
相关产品推荐

