Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python KivyMD:独立的登录屏幕和导航_Python_Kivy_Kivy Language_Kivymd - Fatal编程技术网

Python KivyMD:独立的登录屏幕和导航

Python KivyMD:独立的登录屏幕和导航,python,kivy,kivy-language,kivymd,Python,Kivy,Kivy Language,Kivymd,我想让我的登录屏幕作为应用程序启动时的默认屏幕。 用户登录后,屏幕管理器应切换到主屏幕,这是我的导航的一部分(而登录屏幕不是!) 基本上,我试图使登录屏幕独立于MDBottomNavigation。。。我不能。 现在,在开始时,我看到登录屏幕和带有MDBottomNavigation的主屏幕 在未来,我计划使用其他屏幕,在特定情况下可以访问这些屏幕,但不能从MDBottomNavigation访问。我对kivy和kivymd都很陌生,如果有任何帮助,我将不胜感激 这是我的main.py: fro

我想让我的登录屏幕作为应用程序启动时的默认屏幕。 用户登录后,屏幕管理器应切换到主屏幕,这是我的导航的一部分(而登录屏幕不是!)

基本上,我试图使登录屏幕独立于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()
这是主电源.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”。。。声明后的数据无效