Kivy ScreenManager 切换屏幕离开按钮
Kivy ScreenManager switch screens leaving buttons
我正在使用 ScreenManager 来切换屏幕,但是当我正常切换屏幕时,屏幕上的按钮会保持不变。我必须将按钮复制到每个屏幕。有没有办法在保留按钮的同时切换屏幕?
这是我的应用程序代码:
import (...)
class AppContainer(FloatLayout):
pass
class NavButtons(BoxLayout):
pass
class FirstScreen(Screen):
pass
class SecondScreen(Screen):
pass
class Screens(ScreenManager):
pass
class MainApp(App):
def build(self):
return AppContainer()
(...)
kv 文件如下所示:
#:import BoxLayout kivy.uix.boxlayout.BoxLayout
<AppContainer>:
NavButtons:
Screens:
FirstScreen:
SecondScreen:
ThirdScreen:
<NavButtons>:
orientation:'vertical'
Button:
on_press: root.manager.current="first"
text: 'First'
pos_hint:{"top": 1, "left": 0}
Button:
on_press: root.manager.current="second"
text: 'Second'
pos_hint:{"top":0.8, "left": 0}
<Button>:
size_hint: 0.2, 0.2
<FirstScreen>:
name: "first"
Label:
text: "First Screen"
<SecondScreen>:
name: "second"
Label:
text: "Second Screen"
但这会引发错误:AttributeError: 'NavButtons' object has no attribute 'manager'
有什么想法吗?
在按钮的字段中,根是 NavButtons
,如您所见,NavButtons
没有屏幕作为 children,一种访问方式 Screens
是通过 app.root
即 returns 在这种情况下到 AppContainer
,我们将其设置为 Screens
我们访问它是因为他是 children.
#:import BoxLayout kivy.uix.boxlayout.BoxLayout
<AppContainer>:
NavButtons:
Screens:
id: sm
FirstScreen:
SecondScreen:
<NavButtons>:
orientation:'vertical'
Button:
on_press: app.root.ids.sm.current="first"
text: 'First'
pos_hint:{"top": 1, "left": 0}
Button:
on_press: app.root.ids.sm.current ="second"
text: 'Second'
pos_hint:{"top":0.8, "left": 0}
[...]
我正在使用 ScreenManager 来切换屏幕,但是当我正常切换屏幕时,屏幕上的按钮会保持不变。我必须将按钮复制到每个屏幕。有没有办法在保留按钮的同时切换屏幕?
这是我的应用程序代码:
import (...)
class AppContainer(FloatLayout):
pass
class NavButtons(BoxLayout):
pass
class FirstScreen(Screen):
pass
class SecondScreen(Screen):
pass
class Screens(ScreenManager):
pass
class MainApp(App):
def build(self):
return AppContainer()
(...)
kv 文件如下所示:
#:import BoxLayout kivy.uix.boxlayout.BoxLayout
<AppContainer>:
NavButtons:
Screens:
FirstScreen:
SecondScreen:
ThirdScreen:
<NavButtons>:
orientation:'vertical'
Button:
on_press: root.manager.current="first"
text: 'First'
pos_hint:{"top": 1, "left": 0}
Button:
on_press: root.manager.current="second"
text: 'Second'
pos_hint:{"top":0.8, "left": 0}
<Button>:
size_hint: 0.2, 0.2
<FirstScreen>:
name: "first"
Label:
text: "First Screen"
<SecondScreen>:
name: "second"
Label:
text: "Second Screen"
但这会引发错误:AttributeError: 'NavButtons' object has no attribute 'manager'
有什么想法吗?
在按钮的字段中,根是 NavButtons
,如您所见,NavButtons
没有屏幕作为 children,一种访问方式 Screens
是通过 app.root
即 returns 在这种情况下到 AppContainer
,我们将其设置为 Screens
我们访问它是因为他是 children.
#:import BoxLayout kivy.uix.boxlayout.BoxLayout
<AppContainer>:
NavButtons:
Screens:
id: sm
FirstScreen:
SecondScreen:
<NavButtons>:
orientation:'vertical'
Button:
on_press: app.root.ids.sm.current="first"
text: 'First'
pos_hint:{"top": 1, "left": 0}
Button:
on_press: app.root.ids.sm.current ="second"
text: 'Second'
pos_hint:{"top":0.8, "left": 0}
[...]