Python KivyMD:独立的登录屏幕和导航
我想让我的登录屏幕作为应用程序启动时的默认屏幕。 用户登录后,屏幕管理器应切换到主屏幕,这是我的导航的一部分(而登录屏幕不是!) 基本上,我试图使登录屏幕独立于MDBottomNavigation。。。我不能。 现在,在开始时,我看到登录屏幕和带有MDBottomNavigation的主屏幕 在未来,我计划使用其他屏幕,在特定情况下可以访问这些屏幕,但不能从MDBottomNavigation访问。我对kivy和kivymd都很陌生,如果有任何帮助,我将不胜感激 这是我的main.py:Python KivyMD:独立的登录屏幕和导航,python,kivy,kivy-language,kivymd,Python,Kivy,Kivy Language,Kivymd,我想让我的登录屏幕作为应用程序启动时的默认屏幕。 用户登录后,屏幕管理器应切换到主屏幕,这是我的导航的一部分(而登录屏幕不是!) 基本上,我试图使登录屏幕独立于MDBottomNavigation。。。我不能。 现在,在开始时,我看到登录屏幕和带有MDBottomNavigation的主屏幕 在未来,我计划使用其他屏幕,在特定情况下可以访问这些屏幕,但不能从MDBottomNavigation访问。我对kivy和kivymd都很陌生,如果有任何帮助,我将不胜感激 这是我的main.py: fro
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()
这是主电源.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.kv
#:包括千伏/主屏幕千伏
#:包括千伏/订单屏蔽千伏
#:包括千伏/客户屏幕千伏
#:包括千伏/千伏
:
方向:“垂直”
id:bl
登录筛选:
名称:“登录屏幕”
id:登录屏幕
MDB导航:
id:屏幕管理器
主屏幕:
名称:“主屏幕”
id:主屏幕
订单筛选:
名称:“订单屏幕”
id:orders\u屏幕
客户端屏幕:
名称:“客户端屏幕”
id:客户端屏幕
帐户屏幕:
名称:“帐户屏幕”
id:帐户屏幕
loginscreen.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")
<HomeScreen>:
text: "Home"
icon: "home"
BoxLayout:
orientation: 'vertical'
MDLabel:
text: "SM-COMMERCE APP Main"
halign: "center"
:
文本:“登录”
图标:“登录”
MDBoxLayout:
方向:“垂直”
MDTextField:
id:用户名
提示文字:“用户名”
必填项:True
帮助器\u文本\u模式:“打开\u错误”
MDTextField:
id:密码
密码:True
提示文字:“密码”
必填项:True
帮助器\u文本\u模式:“打开\u错误”
MDRaisedButton:
文本:“登录”
发布时:
应用程序登录(username.text、password.text)
应用程序更改屏幕(“主屏幕”)
主屏幕0.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")
<HomeScreen>:
text: "Home"
icon: "home"
BoxLayout:
orientation: 'vertical'
MDLabel:
text: "SM-COMMERCE APP Main"
halign: "center"
:
正文:“家”
图标:“家”
盒子布局:
方向:“垂直”
MDLabel:
文本:“SM-COMMERCE应用程序主”
哈利恩:“中心”
您可以使用创建两个独立的屏幕。一个屏幕用于登录屏幕,另一个屏幕用于MDBottomNavigation
:
<BL>:
orientation: "vertical"
id: bl
ScreenManager:
id: auth_screenmanager
LoginScreen:
name: "login_screen"
id: login_screen
Screen:
name: 'dashboard'
MDBottomNavigation:
id: screen_manager
HomeScreen:
name: "home_screen"
id: home_screen
### add more screens in future
您可以使用来制作两个分离的屏幕。一个屏幕用于登录屏幕,另一个屏幕用于MDBottomNavigation
:
<BL>:
orientation: "vertical"
id: bl
ScreenManager:
id: auth_screenmanager
LoginScreen:
name: "login_screen"
id: login_screen
Screen:
name: 'dashboard'
MDBottomNavigation:
id: screen_manager
HomeScreen:
name: "home_screen"
id: home_screen
### add more screens in future
无法启动应用程序,我收到以下错误:19:name:“dashboard”20:MDBottomNavigation:>>21:id:dashboard 22:HomeScreen:23:name:“home_screen”。。。声明后的数据无效无法启动应用程序,我收到以下错误:19:name:“dashboard”20:MDBottomNavigation:>>21:id:dashboard 22:HomeScreen:23:name:“home_screen”。。。声明后的数据无效