![](/img/trans.png)
[英]Problems with Kivy ScreenManager (ScreenManager.current trouble)
[英]Trouble with Kivy ScreenManager
最近,我在使用Kivy的Screenmanager时遇到了一些问题。 从Screen
类访问管理器时,不能使用管理器的switch_to
方法。 在Screen
类中: self.manager.switch_to
给出错误: AttributeError: 'NoneType' object has no attribute 'switch_to'
。 我有点绝望。 下面的简单应用会产生错误。
import kivy
kivy.require("1.9.1")
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.screenmanager import ScreenManager, Screen
screen1 = True
class Screen1(Screen):
def __init__(self, **kw):
super(Screen1, self).__init__(**kw)
self.add_widget(Label(text="Screen1"))
class Screen2(Screen):
def __init__(self, **kw):
super(Screen2, self).__init__(**kw)
self.add_widget(Label(text="Screen2"))
class BlackMenu(Screen):
def __init__(self, **kw):
super(BlackMenu, self).__init__(**kw)
if screen1:
self.manager.switch_to(Screen1())
class MyApp(App):
def build(self):
mymanager = ScreenManager()
mymanager.switch_to(BlackMenu(name="black"))
return mymanager
if __name__ == "__main__":
MyApp().run()
尝试将屏幕管理器声明为screen1下的全局变量
import kivy
kivy.require("1.9.1")
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.screenmanager import ScreenManager, Screen
screen1 = True
screen_manager = ScreenManager()
然后在构建函数中添加屏幕,如下所示:
def build(self):
screen_manager.add_widget(Screen1(name='screen1'))
screen_manager.add_widget(Screen2(name='screen2'))
screen_manager.add_widget(BlackMenu(name='black_menu'))
return screen_manager
然后在黑屏中,您可以执行以下操作:
class BlackMenu(Screen):
def __init__(self, **kw):
super(BlackMenu, self).__init__(**kw)
if screen_manager.current == 'screen1':
screen_manager.switch_to(Screen1())
但请记住,切换到屏幕会将屏幕从screen_manager子级中删除,因此您必须设法再次添加它。 祝好运
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.