繁体   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