使用屏幕管理器在屏幕之间切换

use screen manager to switch between screens

我正在尝试在按下按钮后执行屏幕切换。但在屏幕切换之前,我想验证用户名和密码。我正在使用 python 和一个 kv 文件。我是新手,所以非常感谢任何帮助

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.stacklayout import StackLayout
from kivy.uix.scrollview import ScrollView

class MainScreen(Screen):

    def login(self, uname_txt, pin_txt):
        uname_txt = self.ids.uname_txt
        uname_text = uname_txt
        pin_txt= self.ids.pin_txt
        pin_text = pin_txt

        if uname_text == "test" and pin_text == "test":
           self.parent.current = 'homepage'
        else:
            uname_text == ""
            pin_text == ""

Kv 文件:

Button:
    size_hint_y: None
    height: 90
    text: 'Logged users'
    #on_release: app.root.current = ''

Button:
    size_hint_y: None
    height: 90
    text:'create user'
    on_press: app.root.login(uname_txt,pin_txt)

解决方案是使用ScreenManager、id、root.manager等,如下例所示。

例子

main.py

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen


class ScreenManagement(ScreenManager):
    pass


class MainScreen(Screen):

    def login(self, uname_txt, pin_txt):
        if uname_txt == "test" and pin_txt == "test":
           self.parent.current = 'homepage'


class HomePage(Screen):
    pass


class TestApp(App):
    title = "Login Screen"

    def build(self):
        return ScreenManagement()


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

test.kv

#:kivy 1.10.0

<ScreenManagement>:
    MainScreen:
        id: main
    HomePage:

<MainScreen>:
    name: "main_screen"
    GridLayout:
        size_hint: (0.5, 0.5)
        pos_hint: {"center_x": 0.5, "center_y": 0.6}
        cols: 2
        padding: 20

        Label:
            size_hint: (0.2, 0.2)
            text: "User Name"
            font_size: 30
            text_size: self.size
            valign: "middle"

        TextInput:
            id: username
            size_hint: (0.2, 0.06)
            cursor_blink: True
            font_size: 20
            multiline: False

        Label:
            size_hint: (0.2, 0.2)
            text:"Pin:"
            font_size: 30
            text_size: self.size
            valign: "middle"

        TextInput:
            id: pin
            size_hint: (0.2, 0.06)
            cursor_blink: True
            font_size: 20
            multiline: False
            password: True

        Button:
            size_hint_y: None
            height: 90
            text: 'Logged users'

        Button:
            size_hint_y: None
            height: 90
            text:'Create user'
            on_press: root.manager.ids.main.login(username.text, pin.text)

<HomePage>:
    name: "homepage"
    BoxLayout:
        orientation: "vertical"
        Label:
            text: "Home Page"
        Button:
            text: "Go to main screen"
            size_hint_y: 0.1
            on_press: root.manager.current = "main_screen"

输出