Python / KivyMD:如何从python / kivymd

时间:2020-10-05 19:55:43

标签: python kivy kivymd

嗨,我是kivymd的新手,我正尝试打印用户在按下按钮时在屏幕内的MDTextField中插入的文本。通常我会使用 self.screen.ids.name_of_id.text 来访问.py文件中的文本,但是在使用屏幕时似乎不起作用,并给出错误 AttributeError:“超级”对象没有属性“ getattr 。有没有办法从.py文件访问文本?

我的.kv代码段

ScreenManager:
    ForgotPassword:
    Login:
    ResetPassword:
    Main:

<ForgotPassword@Screen>
    name: "forgot"
    MDFloatLayout:

        MDTextField:
            id: forgot_email
            hint_text: "Email"
            size_hint: .7, None
            pos_hint: {"center_x": .5}

        MDFillRoundFlatButton:
            text: "                Requesitar Nova Password                "
            md_bg_color: 0, 0.4, 1, 1
            text_color: 1, 1, 1, 1
            font_size: 16
            pos_hint: {"center_x": .5, "center_y": .15}
            on_press: app.forgot_password()

我的.py代码

class MainApp(MDApp):
    def build(self):
        self.theme_cls.primary_palette = "Blue"
        self.theme_cls.theme_style = "Light"
        self.theme_cls.primary_hue = "500"
        self.screen = Builder.load_file("Backup.kv")
        return self.screen

    def forgot_password(self):
        print(self.screen.ids.forgot_email.text)



MainApp().run()

1 个答案:

答案 0 :(得分:0)

您的self.screen语句中的print()ScreenManager,在您的情况下,它将没有ids,从而导致错误。 ids仅在kv中每个规则的根目录中可用。因此,在您的kv中,只有ScreenManagerForgotPassword可以有ids。但是ids中没有定义ScreenManager,因此它将没有idsforgot_email是根据ForgotPassword规则定义的,因此id将出现在ids ForgotPassword实例的Screen中。因此,要访问该MDTextField,请尝试:

def forgot_password(self):
    print(self.screen.get_screen('forgot').ids.forgot_email.text)