【问题标题】:Kivy ScreenManager switch screens leaving buttonsKivy ScreenManager 切换屏幕离开按钮
【发布时间】:2018-02-15 11:14:26
【问题描述】:

我正在使用 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'

有什么想法吗?

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:

    在按钮的字段中,根是NavButtons,正如您所见,NavButtons 没有子屏幕,访问Screens 的方法是通过app.root,在这种情况下返回到AppContainer,我们将其设置为Screens,因为他是孩子,所以我们访问它。

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

    【讨论】:

    • 非常感谢!
    • 知道为什么过渡效果会导致那些静态按钮闪烁/重新加载吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    相关资源
    最近更新 更多