【问题标题】:Switch screen with screenmanager with python code使用带有 python 代码的屏幕管理器切换屏幕
【发布时间】:2021-02-26 22:05:56
【问题描述】:

我正在为学校制作一个应用程序,需要在我的屏幕管理器中切换屏幕(与 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()```

【问题讨论】:

    标签: python kivy kivymd


    【解决方案1】:

    代码中的行:

    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'))
    

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

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

    sm.current_screen = 'Main'
    

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

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

    这假定您的kv 文件描述了一个Widget 树,其中ScreenManager 作为根。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      相关资源
      最近更新 更多