Python Kivy ScreenManager出现问题(ScreenManager.current trouble)

Python Kivy ScreenManager出现问题(ScreenManager.current trouble),python,android,python-3.x,kivy,kivy-language,Python,Android,Python 3.x,Kivy,Kivy Language,我与ScreenManager的问题是,它不会改变密码检查后的屏幕。 检查密码并确认无误后,需要切换到主菜单屏幕。现在它只在程序下一次启动后工作,因为当你输入正确的密码时,你只会看到密码是正确的,仅此而已 这是我的main.py: 从kivy.app导入应用 从kivymd.theming导入管理器 从kivymd.label导入MDLabel 从kivy.uix.screenmanager导入screenmanager,屏幕 从kivy.uix.boxlayout导入boxlayout 从ki

我与ScreenManager的问题是,它不会改变密码检查后的屏幕。 检查密码并确认无误后,需要切换到主菜单屏幕。现在它只在程序下一次启动后工作,因为当你输入正确的密码时,你只会看到密码是正确的,仅此而已

这是我的main.py:

从kivy.app导入应用
从kivymd.theming导入管理器
从kivymd.label导入MDLabel
从kivy.uix.screenmanager导入screenmanager,屏幕
从kivy.uix.boxlayout导入boxlayout
从kivy.uix.anchorlayout导入anchorlayout
从kivy.metrics导入dp、sp、pt
从kivy.properties导入ObjectProperty、NumericProperty、StringProperty、BooleanProperty、ListProperty
从kivymd.toast.kivytoast导入toast
从kivymd.textfields导入MDTextField
从kivy.storage.jsonstore导入jsonstore
从kivy.uix.textinput导入textinput
从kivy.uix.screenmanager导入幻灯片转换
从kivy.uix.screenmanager导入NotTransition
类键输入(MDTextField):
通过
班级经理(屏幕经理):
定义初始(自我,**kwargs):
超级(经理,自我)。\uuuuu初始值(**kwargs)
psw=JsonStore('password.json')
如果psw.存在(“密钥”):
registeredkey=psw.get('key')['keyvalue']
如果注册了dkey!='12345678':
self.transition=nottransition()
self.current='login\u screen'
其他:
self.transition=nottransition()
self.current='主菜单'
其他:
toast('您的系统中没有密钥!')
self.transition=nottransition()
self.current='login\u screen'
类登录屏幕(屏幕):
def钥匙检查(自检):
psw=JsonStore('password.json')
如果self.kinput.text==“12345678”:
toast('键正确')
mngr=Manager()
mngr.transition=nottransition()
mngr.current='主菜单'
put('key',keyvalue=str(self.kinput.text))
elif len(self.kinput.text)>8:
toast('文本太多!')
其他:
toast('键不正确!')
类主菜单(屏幕):
定义初始(自我,**kwargs):
超级()
kinput=ObjectProperty(无)
self.menu\u项目=[
{
“viewclass”:“MDMenuItem”,
“文本”:“文本%d”%i,
“回调”:自我回调,
}
对于范围(1,3)中的i
]
self.menu_按钮=无
def change_变量(自身,值):
打印(“\n值=”,值)
self.VARIABLE=值
打印(“\tself.VARIABLE=,self.VARIABLE”)
def回调(自,*args):
吐司(args[0])
类主应用程序(应用程序):
title=“KivyMD MDDropdownMenu演示”
theme_cls=ThemeManager()
def生成(自):
退货经理()
如果名称=“\uuuuu main\uuuuuuuu”:
MainApp().run()
这是我的主要观点:

#:导入MDDropdownMenu kivymd.menus.MDDropdownMenu
#:导入MDRaisedButton kivymd.button.MDRaisedButton
#:导入MDLabel kivymd.label.MDLabel
:
哈利恩:“中心”
字体大小:dp(12)
:
大小提示:无,无
尺寸:3*dp(48),dp(48)
位置提示:{'center_x':0.5,'center_y':0.5}
相反颜色:真
:
尺寸提示:0.5
哈利恩:“中心”
位置提示:{'center_x':.5'center_y':.5}
最大文本长度:8
:
登录筛选:
id:登录屏幕
名称:“登录屏幕”
主菜单:
id:主菜单
名称:“主菜单”
:
金普特:金普特
主持人安排:
主播:“中心”
盒子布局:
方向:“垂直”
尺寸提示:0.5,0.5
位置提示:{'center_x':0.5,'center_y':0.5}
间距:dp(10)
MDRB:
文本:“登录”
发布时:
root.keycheck()
按键输入:
id:kinput
提示文字:“登录密码”
:
主持人安排:
主播:“中心”
盒子布局:
方向:“垂直”
尺寸提示:0.5,0.5
位置提示:{'center_x':0.5,'center_y':0.5}
间距:dp(10)
可选标签:
文本:“您已登录”
谢谢你的关注和帮助

kv代码中的管理器实际上与 一个在keycheck函数中(您已经实例化了 您的经理课程)。尝试使用self.manager和self.manager.current= 在keycheck函数中使用“whatever”,而不是mgr=Manager()。这个 屏幕的管理器属性应该指的是它的屏幕管理器。 kivy.org/doc/stable/api-kivy.uix.screenmanager.html


kv代码中的
管理器
实际上与
keycheck
函数中的管理器不同(您已经实例化了
管理器
类的一个新对象)。尝试在
keycheck
函数中使用
self.manager
self.manager.current=“whatever”
,而不是
mgr=manager()
屏幕的
manager
属性应指的是它的
ScreenManager
。谢谢!它实际上很好用!