如何从 KivyMD 文本字段中获取文本?

Posted

技术标签:

【中文标题】如何从 KivyMD 文本字段中获取文本?【英文标题】:How to get text from a KivyMD text field? 【发布时间】:2021-10-06 04:05:04 【问题描述】:

我正在尝试从文本字段中获取文本,但似乎无法正确获取。我想从 LoginScreen 中的 MDTextField 中获取文本。这是我的 .kv 文件:

ScreenManager:
    LoginScreen:
    VaultScreen:
<LoginScreen>:
    id: login
    name: 'login'
    MDTextField:
        id: master_password
        hint_text: "Master Password"
        size_hint_x: None
        width: 200
        font_size: 18
        pos_hint: "center_x": 0.5, "center_y": 0.5
        password: True
    MDRectangleFlatButton:
        text: "Unlock"
        font_size: 12
        pos_hint: "center_x": 0.5, "center_y": 0.4
        on_release: app.verify()
<VaultScreen>:
    name: 'vault'
    MDLabel:
        text: 'Vault'
        halign: 'center'
    MDRectangleFlatButton:
        text: 'Back'
        pos_hint: 'center_x': 0.5, 'center_y': 0.1
        on_press: root.manager.current = 'login'

这是我的 .py 文件:

    from kivymd.app import MDApp
    from kivy.lang.builder import Builder
    from kivy.uix.screenmanager import ScreenManager, Screen
    
    class ScMn(ScreenManager):
        pass
    
    class LoginScreen(Screen):
        pass
    
    class VaultScreen(Screen):
        pass
    
    class App(MDApp):
        def build(self):
            screen = Builder.load_file('pas-s-r.kv')
            return screen
        
        def verify(self):
            # this is where I want to get the text
            master = self.root.ids.login.master_password.text
            pass
        
    App().run()

当我尝试获取 self.root.ids 的内容时,我得到一个空字典。

【问题讨论】:

【参考方案1】:

您的代码:

self.root.ids.login.master_password.text

正在尝试访问self.rootids,但self.rootScreenManager,它没有ids。在kv 中定义的ids 存储在小部件的ids 字典中,该小部件是包含id 定义的规则的根。由于您在&lt;LoginScreen&gt; 规则中定义了一些ids,因此ids 将在LoginScreen 对象中。因此,您必须获得对LoginScreen 的引用,您可以通过使用get_screen() 方法来做到这一点,如下所示:

self.root.get_screen('login').ids.master_password.text

【讨论】:

以上是关于如何从 KivyMD 文本字段中获取文本?的主要内容,如果未能解决你的问题,请参考以下文章

KivyMD:如何从 python 中添加的 TextField 获取文本

如何在kivyMD中获取标签的文本输入

如何动态更改 MDDialog KivyMD 中的文本字段?

如何在kivymd focus agane中制作输入字段

如何在 kivymd 文本字段上设置两种模式?

如何使用 Python 代码从 kv 文件中的 TextField 获取数据?