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

Kivy框架:如何在父组件中使用自定义按钮的on_release事件

当然可以用on_release替代状态判断,这才是更贴合Kivy设计意图的做法!

你的思路完全正确,按钮的on_release事件就是专门用来处理用户松开按钮这个动作的,刚好匹配你原来“当按钮回到normal状态时跳转页面”的逻辑(因为on_release就是在按钮从down切换回normal时触发的)。下面给你两种实现方案,根据你的需求选择即可:

方案1:给动态类添加自定义事件,外部灵活绑定

这种方式能让你在MainScreen里直接给MiddleSectionMain的按钮绑定逻辑,保持代码的解耦性:

首先修改你的MiddleSectionMain定义,先声明一个自定义事件,再把内部按钮的on_release绑定到触发这个事件:

#:kivy 1.10.1
#:include gui/components.kv
<MiddleSectionMain@AnchorLayout>:
    anchor_x: 'center'
    anchor_y: 'center'
    lb_text: ''
    text: spinner_1.text

    # 声明自定义事件,用于向外暴露按钮的release动作
    on_button1_release: pass

    BoxLayout:
        orientation: 'horizontal'
        Label:
            text: root.lb_text
            size_hint_x: 0.3
        Spinner:
            id: spinner_1
            text: 'Select'
        IconButtonSmall:
            id: button_1
            icon_source: 'icons/add_32.png'
            # 按钮松开时,触发root的自定义事件
            on_release: root.dispatch('on_button1_release')
        IconButtonSmall:
            id: button_2
            icon_source: 'icons/edit_32.png'

然后在MainScreen里,直接绑定这个自定义事件即可,无需再判断状态:

<MainScreen>:
    orientation: 'vertical'
    Label:
        font_size: 25
        text: "Headline"
    GridLayout:
        cols: 1
        MiddleSectionMain:
            lb_text: "Label"
            # 直接绑定按钮release后的逻辑
            on_button1_release: app.root.current = 'Screen2'
        MiddleSectionMain:
            lb_text: "Label"

方案2:直接在动态类内部处理on_release

如果这个按钮的逻辑是固定的,不需要外部灵活配置,也可以直接在MiddleSectionMain里给按钮绑定on_release:

<MiddleSectionMain@AnchorLayout>:
    # ... 其他属性保持不变 ...
    IconButtonSmall:
        id: button_1
        icon_source: 'icons/add_32.png'
        # 直接在这里写release后的逻辑
        on_release: app.root.current = 'Screen2'

注意事项

确保你的IconButtonSmall正确继承自Kivy的Button类(或其子类),这样它才会原生支持on_release事件。如果是完全自定义的按钮类,记得在用户松开按钮时调用self.dispatch('on_release')来触发这个事件。

这样修改后,代码会比原来的状态判断更简洁,也更符合Kivy的事件驱动设计理念~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:24:07