Python KivyMD: как вызвать функцию с помощью кнопки? - PullRequest
0 голосов
/ 09 мая 2020

Я новичок в kivy и kivyMD, и я пытался вызвать функцию, которая печатала бы адрес электронной почты и пароль пользователя. как я могу связать функцию или использовать on_press в этом коде? Я пробовал использовать метод on_pressed: root .function (), но он не работает, так как моя функция не написана в pr-emade ScreenManager

.PY

import...
Builder.load_string("""
   #:include kv/login.kv
   #:import utils kivy.utils 
   #:import images_path kivymd.images_path
""")

class MyApp(MDApp):
    def __init__(self, **kwargs):
        self.title = "iKarate"
        self.theme_cls.theme_style = "Light"
        self.theme_cls.primary_palette = "Blue"
        self.sm = ScreenManager()
        super().__init__(**kwargs)

    def build(self):
        self.sm.add_widget(Factory.LoginScreen())

        return self.sm

    def doThis(self):
        email = self.email
        password = self.password
        print(email, password)

if __name__ == "__main__":
    MyApp().run()

.KV

#:kivy 1.11.1
<LoginScreen@Screen>:
    name: "login"

    BackgroundLayer:

    #MDCard:
    MDCard:
        orientation: "vertical"
        size_hint: [0.8, 0.6]
        pos_hint: {"center_x": 0.5, "center_y": 0.6}
        BoxLayout:
            orientation: "vertical"
            MDLabel:
                text: "Welcome to the log in page"
                text_size: self.size
                font_size: 25
                bold: True
                halign: "center"
                valign: "middle"

            Image:
                size_hint_y: 10
                source: "kv/image.png"

            MDTextField:
                id: email
                hint_text: "E-mail"

            MDTextField:
                id: password
                hint_text: "Password"
                password: True

            MDFillRoundFlatButton:
                id: btn
                text: "Sign In"
                width: dp(200)
                pos_hint: {"center_x": .5}
                on_press:print("pressed")

<BackgroundLayer@BoxLayout>:
    orientation: "vertical"
    BoxLayout:
        orientation: "vertical"
        canvas.before:
            Color:
                rgba: utils.get_color_from_hex("#00146e")
            Rectangle:
                pos: 0, self.center_y + self.height/3 - 50
                size: (self.width,70)

    BoxLayout:
        orientation: "horizontal"

on_press: print («нажатый») успешно печатает «нажатый»

1 Ответ

0 голосов
/ 09 мая 2020

Используйте это, если вы вызываете функцию из App класса:

on_press: app.doThis()

И используйте это, если вы вызываете функцию из Screen класса:

on_press: root.doThis()
...