我想让我的登录屏幕作为应用程序启动时的默认屏幕。用户登录后,屏幕管理器应该切换到主屏幕,这是我的 MDBottomNavigation 的一部分(登录屏幕不是!)。
基本上,我正在尝试使登录屏幕独立于 MDBottomNavigation ......但我做不到。现在一开始我看到登录屏幕和带有 MDBottomNavigation 的主屏幕。
将来,我计划有其他屏幕,应该在特定情况下访问,但不能从 MDBottomNavigation 访问。我对 kivy 和 kivymd 都很陌生,将不胜感激!
这是我的 main.py:
from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.uix.bottomnavigation import MDBottomNavigationItem
import requests
import json
from kivy.uix.screenmanager import Screen
# the Root
class BL(MDBoxLayout):
pass
# screens
class LoginScreen(Screen):
pass
class HomeScreen(MDBottomNavigationItem):
pass
class OrdersScreen(MDBottomNavigationItem):
pass
class ClientsScreen(MDBottomNavigationItem):
pass
class AccountScreen(MDBottomNavigationItem):
pass
class MainApp(MDApp):
def log_in(self, username, password):
log_in_url = "http://127.0.0.1:8000/api-token-auth/"
log_in_data = {"username": username, "password": password}
log_in_request = requests.post(log_in_url, data=log_in_data)
response_data = json.loads(log_in_request.content.decode())
if log_in_request.ok:
token = response_data["token"]
with open("token.txt", "w") as f:
f.write(token)
user_id = response_data["user_id"]
def change_screen(self, screen_name):
screen_manager = self.root.ids['screen_manager']
screen_manager.current = screen_name
def build(self):
return BL()
MainApp().run()
这是main.kv
#: include kv/loginscreen.kv
#: include kv/homescreen.kv
#: include kv/ordersscreen.kv
#: include kv/clientsscreen.kv
#: include kv/accountscreen.kv
<BL>:
orientation: "vertical"
id: bl
LoginScreen:
name: "login_screen"
id: login_screen
MDBottomNavigation:
id: screen_manager
HomeScreen:
name: "home_screen"
id: home_screen
OrdersScreen:
name: "orders_screen"
id: orders_screen
ClientsScreen:
name: "clients_screen"
id: clients_screen
AccountScreen:
name: "account_screen"
id: account_screen
登录屏幕.kv:
<LoginScreen>:
text: "Login"
icon: "login"
MDBoxLayout:
orientation: "vertical"
MDTextField:
id: username
hint_text: "Username"
required: True
helper_text_mode: "on_error"
MDTextField:
id: password
password: True
hint_text: "Password"
required: True
helper_text_mode: "on_error"
MDRaisedButton:
text: "Sign In"
on_release:
app.log_in(username.text, password.text)
app.change_screen("home_screen")
主屏幕.kv:
<HomeScreen>:
text: "Home"
icon: "home"
BoxLayout:
orientation: 'vertical'
MDLabel:
text: "SM-COMMERCE APP Main"
halign: "center"