You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy组件层级行为异常:按钮切换屏幕仅单个生效求助

问题原因与解决方案

你的问题出在KV语言的语法错误上:前两个按钮的on_press回调里用了冒号:进行赋值,而Kivy的事件处理代码块中,赋值必须使用等号=。

具体问题点

看这两个按钮的代码:

Button:
    text: "placeholder"
    font_size: 32
    on_press:
        app.root.current: "courseprogress"  # 这里用了冒号,错误
        root.manager.transition.direction: "left"  # 同样错误

在KV语言中,:是用来定义组件属性的语法(比如text: "placeholder"),但在on_press这类事件的代码块里,执行赋值操作必须用=,否则Kivy不会将其识别为有效的赋值动作,自然不会触发屏幕切换。

第三个按钮用了=,所以能正常工作:

Button:
    text: "Next Screen"
    font_size: 32
    on_press:
        app.root.current = "courseprogress"  # 等号,正确
        root.manager.transition.direction = "left"  # 等号,正确

修正后的代码

把前两个按钮的on_press代码改成等号赋值即可:

GridLayout:
    name: "bottomGrid"
    cols: 2

    Button:
        text: "placeholder"
        font_size: 32
        on_press:
            app.root.current = "courseprogress"
            root.manager.transition.direction = "left"

    Button:
        text: "placeholder2"
        font_size: 32
        on_press:
            app.root.current = "courseprogress"
            root.manager.transition.direction = "left"

补充说明

你对app.root的理解是对的——它确实指向应用的根组件(这里就是WindowManager),是全局有效的;root.manager则是当前屏幕(CourseGridLayout)所属的ScreenManager,两者在这个场景下效果一致,只是你的语法错误导致前两个按钮的逻辑没执行。

内容的提问来源于stack exchange,提问作者Arana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:05:02