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