当前位置: 首页 > news >正文

Kivy的ButtonBehavior学习

Kivy的ButtonBehavior学习

  • ButtonBehavior 简介
    • 1、主要特点
    • 2、基本用法
    • 3、主要事件
    • 4、常用属性
    • 5、方法
    • 代码示例

文档: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 Imageclass 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_imagedef on_press(self):# 按钮按下时切换图像self.source = self.pressed_imageprint(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_imageprint(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 boxdef tr(self, dt):print(dt)self.nn.trigger_action(3) # 代码触动按下,按下时间为3s# 运行应用
if __name__ == '__main__':ss = ButtonBehaviorDemo()ss.run()

在这里插入图片描述

相关文章:

  • java面向对象高级部分
  • day6补 cpp:c++输入输出流,流的四种状态,标准输入输出流
  • CUDA 与 cuDNN 免登录下载政策详解(基于官方权威信息)
  • 软件确认测试报告:如何评估软件功能及测试关键点?
  • Java并发编程实战 Day 17:CompletableFuture高级应用
  • 爬虫+动态代理助力 AI 训练数据采集
  • QT绘制会动的蚂蚁线
  • AI服务代码说明文档
  • STM32学习之不同FLASH的芯片启动文件选择规则
  • 数据冗余对企业运营的隐性成本
  • 解决idea创建SpringBoot项目,会自动创建.git文件导致commit两极分化的现象。
  • 浅析hashmap
  • Linux驱动:framebuffer应用层实践
  • 西门子 SINAMICS S200伺服,重塑汽车焊接工艺新标准
  • 电子电路原理第十八章(有源滤波器)
  • 编程项目学习,怎么快速掌握
  • MySQL中外键约束详解 外键在表关系维护中的作用
  • 12.ack,ACK 的区别与含义
  • 从编辑到安全设置: 如何满足专业文档PDF处理需求
  • vue3 + element plus 实现表格列头、行的添加及拖动换位
  • 锡盟建设工程造价工程管理网站/郑州营销型网站建设
  • 网站建设加网络营销/google浏览器下载安装
  • 企业自助建站系统下载/手机端竞价恶意点击能防止吗
  • 做阿里巴巴类似的网站/提高工作效率总结心得
  • 网站建设网站源码/怎么样把自己的产品网上推广
  • 自己建网站做微商/优速网站建设优化seo