Python Kivy Screen Manager

时间:2016-03-09 10:10:40

标签: python kivy

<LowerBoxNav>:
    BoxLayout:
        orientation: 'horizontal'
        LoginButtonsApp:
            size_hint_x:0.5
            pos_hint_x: 0.2
            pos_hint_y: 0.2
            on_press:
                root.manager.current='LoginScreen#'

        NextButtonsApp:
            size_hint_x:0.5
            pos_hint_x: 0.2
            pos_hint_y: 0.2
            on_press:
                root.manager.current='ScreenThree#'

<HomePage>:
    LayoutsApp:
        LabelsApp:
            pos_hint: {'center_x': .5, 'center_y': .7}
            text: root.homepageusernametext
        NextButtonsApp:
            pos_hint: {'center_x': .5, 'center_y': .5}
            on_press: 
                root.manager.current='ScreenThree#'
    LowerBoxNav:

我在.kv文件中有两个小部件: - HomePage - 它继承自Screen并具有screen.manager属性,用于管理屏幕转换 - LowerBoxNav - 这是一个盒子布局。基本上我希望每个页面都有这种布局。有两个按钮 - LoginButtonsApp和NextButtonsApp,它们位于框布局中。

我的问题如下: - 使用上面的代码,我得到错误AttributeError:&#39; LowerBoxNav&#39;对象没有属性&#39; manager&#39; - 我还尝试在HomePage屏幕中为LowerBoxNav小部件中的每个按钮添加on_press - 在这种情况下,我每个按钮有2个

在我的应用的每个屏幕上基本上都有相同的LowerBoxNav,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

root表示&lt;&gt;中的规则或小部件,对您来说意味着BoxLayout,因此没有manager可用,您获得AttributeError < / p>

您必须通过manager窗口小部件访问Screen属性,或者自行设置屏幕位于顶部且BoxLayout位于其中的规则。另外,Screen必须是ScreenManager的孩子,否则无效。

修改:将root.manager.current更改为root.parent.manager.current

答案 1 :(得分:0)

using (var p = new ChoCSVReader<Site>("*** YOUR CSV FILE PATH ***")
    .WithFirstLineHeader(true)
    )
{
    Exception ex;
    Console.WriteLine("IsValid: " + p.IsValid(out ex));
}

为ScreenManager提供sm的id,然后将按钮设置为on_press:app.root.ids.sm.current =&#34; Whatever&#34;。然后确保使用名称定义页面并将该名称传递给screenmanager。所以在您的kv文件中为screenthree例如

<LowerBoxNav>:
    BoxLayout:
        orientation: 'horizontal'
        LoginButtonsApp:
            size_hint_x:0.5
            pos_hint_x: 0.2
            pos_hint_y: 0.2
            on_press:
                app.root.ids.sm.current='LoginScreen#'

        NextButtonsApp:
            size_hint_x:0.5
            pos_hint_x: 0.2
            pos_hint_y: 0.2
            on_press:
                app.root.ids.sm.current='ScreenThree#'

<HomePage>:
    id: sm
    LayoutsApp:
        LabelsApp:
            pos_hint: {'center_x': .5, 'center_y': .7}
            text: root.homepageusernametext
    LowerBoxNav:
    ScreenThree: