簡體   English   中英

Kivy ScreenManager出現問題

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM