Kivy的ButtonBehavior学习

文档:https://kivy.org/doc/stable/api-kivy.uix.behaviors.button.html#kivy.uix.behaviors.button.ButtonBehavior

ButtonBehavior 简介

ButtonBehavior 是 Kivy 框架中的一个行为类,用于为其他小部件添加按钮式的交互功能。

1、主要特点

  1. 非可视化组件:ButtonBehavior 本身不提供任何视觉元素,它只是添加按钮交互逻辑
  2. 混合使用:可以与其他小部件类一起多重继承,使任何小部件具有按钮行为
  3. 事件处理:自动处理常见的触摸/点击事件

2、基本用法

from kivy.uix.behaviors import ButtonBehavior
from kivy.uix.image import Image

class ImageButton(ButtonBehavior, Image):
    def on_press(self):
        print("图片按钮被按下")

    def on_release(self):
        print("图片按钮被释放")

3、主要事件

  • on_press(): 当按钮被按下时触发
  • on_release(): 当按钮被释放时触发
  • on_state(): 当按钮状态改变时触发(正常/按下)

4、常用属性

  • state: 按钮的当前状态(‘normal’ 或 ‘down’)
  • always_release: 布尔值,决定是否总是触发释放事件,默认是false,也就是按钮按钮后移动到按钮外面释放,不会调用on_release,但是state还是会改变
  • last_touch:最后一次触碰按钮的事件
  • min_state_time:The minimum period of time which the widget must remain in the ‘down’ state.但是我没有验证成功。

5、方法

  • trigger_action(duration=0.1) 代码调用按下按钮,duration是按下的时间

ButtonBehavior 使得开发者可以轻松地为任何小部件添加按钮交互功能,而不必从头开始实现所有触摸事件处理逻辑。

代码示例

from kivy.app import App
from kivy.uix.behaviors import ButtonBehavior
from kivy.uix.image import Image
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.lang import Builder
from kivy.properties import StringProperty
# 修改全局默认值示例
from kivy.config import Config
Config.set('graphics', 'min_state_time', '50')
# 在创建窗口前设置
Config.set('graphics', 'width', '600')
Config.set('graphics', 'height', '300')
from kivy.clock import Clock
# 创建自定义图像按钮类
class ImageButton(ButtonBehavior, Image):
    # 定义两个图像路径属性,用于按钮的不同状态
    normal_image = StringProperty('1.png')
    pressed_image = StringProperty('2.png')
    
    def __init__(self, **kwargs):
        super(ImageButton, self).__init__(**kwargs)
        self.source = self.normal_image
    
    def on_press(self):
        # 按钮按下时切换图像
        self.source = self.pressed_image
        print(f"on_press 按钮 {self.state}!")
        print(f"on_press 按钮 {self.last_touch}!")
        print(f"on_press 按钮 {self.min_state_time}!")
    
    def on_release(self):
        # 按钮释放时恢复原图像
        self.source = self.normal_image
        print(f"on_release 按钮 {self.state}!")
        print(f"on_release 按钮 {self.last_touch}!")
        print(f"on_release 按钮 {self.min_state_time}!")
        print(f"按钮 {self} 被点击!")
    
    def on_state(self, instance, value):
        # always_release默认是false,在按钮上按下,在按钮的外面松开,
        # 不会调用on_release,但是on_state还是会改变
        print(f"on_state 按钮 {self.state}!")



# 主应用类
class ButtonBehaviorDemo(App):
    def build(self):
        # 加载KV语言
        self.nn= ImageButton()        
        Clock.schedule_once(ss.tr, 3) # 延时3秒后调用
        btn2 = Button(text='World',
                       background_normal='2.png',
                       background_down='1.png')
        box = BoxLayout()
        box.add_widget(self.nn)
        box.add_widget(btn2)
        return box
    def tr(self, dt):
        print(dt)
        self.nn.trigger_action(3) # 代码触动按下,按下时间为3s


# 运行应用
if __name__ == '__main__':
    ss = ButtonBehaviorDemo()
    ss.run()

    

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值