使用带有 python 代码的屏幕管理器切换屏幕

时间:2021-02-26 22:05:56

标签: python kivy kivymd

我正在为学校制作一个应用程序,需要在我的屏幕管理器中切换屏幕(使用 kivymd 和屏幕管理器)。 检查用户名和密码后,我需要切换屏幕。 我想用 python 代码切换它们,而不是在 kv 文件中用 ""on_press: root.manager.current = 'Login'"" 切换。

在 def 验证中,我尝试使用“sm.current_screen = 'Main'”但它不起作用。

有人可以帮我吗?

class LoginScreen(Screen):
    pass


class RegisterScreen(Screen):
    pass


class MainScreen(Screen):
    pass


class Change(Screen):
    pass


class ShowObj(Screen):
    pass


sm = ScreenManager()
sm.add_widget(LoginScreen(name='Login'))
sm.add_widget(RegisterScreen(name='Register'))
sm.add_widget(MainScreen(name='Main'))
sm.add_widget(Change(name='change'))
sm.add_widget(Change(name='Show'))


class GipApp(MDApp):
    def build(self):
        self.theme_cls.primary_palette = 'Blue'
        screen = Builder.load_string(screen_helper)
        self.username = "unknown"
        return screen


    def verify(self, username, password):
        if username != "" and password != "":
            for row in MySqlNames:
                if row[0].strip() == username:
                    sql = "SELECT Password from ID191774_6itn1project7.Users where Username = %s "
                    mycursor.execute(sql, (username))
                    TestPassword = mycursor.fetchall()
                    for row3 in TestPassword:
                        if row3[0].strip() == password:
                            print("inloggen is gelukt")
                            self.username = username
                            print(self.username)
                            sm.current_screen = 'Main'

                        if row3[0] != password:
                            dialog = MDDialog(title="Passwords is not correct.")
                            dialog.open()```

1 个答案:

答案 0 :(得分:0)

代码中的行:

sm = ScreenManager()
sm.add_widget(LoginScreen(name='Login'))
sm.add_widget(RegisterScreen(name='Register'))
sm.add_widget(MainScreen(name='Main'))
sm.add_widget(Change(name='change'))
sm.add_widget(Change(name='Show'))

没有完成任何事情,因为您没有在 sm 中使用 App。您可以删除这些行。

由于您的 sm 中未使用 App,因此该行:

sm.current_screen = 'Main'

不会改变 Screen。我建议您将该行替换为:

App.get_running_app().root.current = 'Main'

这假设您的 kv 文件描述了一个以 Widget 作为根的 ScreenManager 树。