代码之家  ›  专栏  ›  技术社区  ›  cmrussell

Kivy ScreenManager切换屏幕离开按钮

  •  0
  • cmrussell  · 技术社区  · 7 年前

    我使用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”对象没有属性“manager”

    有什么想法吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   eyllanesc Yonghwan Shin    7 年前

    在按钮的字段中,根是 NavButtons ,正如你所看到的 导航按钮 作为孩子没有屏幕,这是一种访问方式 Screens 已通过 app.root 在这种情况下返回到 AppContainer ,我们将其设置为 屏幕 我们访问这个是因为他是个孩子。

    #: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}
    
    [...]