[英]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.