【问题标题】:Trouble with Kivy ScreenManagerKivy ScreenManager 的问题
【发布时间】:2016-08-29 15:43:41
【问题描述】:

最近我在使用 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()

【问题讨论】:

  • 我认为问题出在 BlackMenu 上,因为在构建过程中实例管理器属性为 None。

标签: python kivy


【解决方案1】:

尝试将您的屏幕管理器声明为 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 子级中删除该屏幕,因此您必须重新管理添加它。 祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    相关资源
    最近更新 更多