<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,我将不胜感激。
答案 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: