簡體   English   中英

使用帶有 python 代碼的屏幕管理器切換屏幕

[英]Switch screen with screenmanager with python code

我正在為學校制作一個應用程序,需要在我的屏幕管理器中切換屏幕(與 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()```

代碼中的行:

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 您可以刪除這些行。

由於sm未在您的App中使用,因此該行:

sm.current_screen = 'Main'

不會改變Screen 我建議您將該行替換為:

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

這假設您的kv文件描述了一個以ScreenManager作為根的Widget樹。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM