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()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPS中将在线链接转为图片

WPS中将在线链接转为图片 文章目录 WPS中将在线链接转为图片一:解决方案1、下载图片,精确匹配(会员功能)2、将在线链接直接转为图片 一:解决方案 1、下载图片,精确匹配(会员功能) …

API:解锁数字化协作的钥匙及开放实现路径深度剖析

API:解锁数字化协作的钥匙及开放实现路径深度剖析 一、API 的概念与本质 (一)定义与基本原理 API(Application Programming Interface,应用程序编程接口)是一组定义、协议和工具,用于构建和集成软件应用程序。它如同一个精心设计的合约,详细规定了软件组件之间相互交…

Azure 虚拟机端口资源:专用 IP 和公共 IP Azure Machine Learning 计算实例BUG

## 报错无解 找不到Azure ML 计算实例关联的 NSG .env 文件和 ufw status: .env 文件中 EXPOSE_NGINX_PORT8080 是正确的,它告诉 docker-compose.yaml 将 Nginx 暴露在宿主机的 8080 端口。 sudo ufw status 显示 Status: inactive,意味着宿…

深入理解Python协程:async def、async for、await、yield详解

前言 在现代编程中,异步编程已成为提高程序效率和性能的重要方式。 Python 作为一种流行的编程语言,自然也提供了强大的异步编程支持。 本文将详细介绍 Python 中的协程,以及 async def、async for、await 和 yield 等关键字的使用。 协程简介…

基于功能基团的3D分子生成扩散模型 - D3FG 评测

D3FG 是一个在口袋中基于功能团的3D分子生成扩散模型。与通常分子生成模型直接生成分子坐标和原子类型不同,D3FG 将分子分解为两类组成部分:官能团和连接体,然后使用扩散生成模型学习这些组成部分的类型和几何分布。 一、背景介绍 D3FG 来源…

写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里

写一个shell脚本&#xff0c;把局域网内&#xff0c;把能ping通的IP和不能ping通的IP分类&#xff0c;并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…

如何提升企微CRM系统数据的准确性?5大核心策略详解

在数字化客户管理时代&#xff0c;企微CRM管理系统已成为企业连接客户的核心平台。但据统计&#xff0c;73%的企业因数据质量问题导致客户分析失真、营销效果下降。本文将深入解析影响数据准确性的关键因素&#xff0c;并提供可落地的优化方案&#xff0c;帮助企业在企微CRM软件…

Unity轻松实现麦克风录音与播放

文章目录 概要录音&#xff0c;播放音频注意事项参考 概要 之前有想写一个音乐播放的器的音频功能&#xff0c;一直没做&#xff0c;最近突然想写&#xff0c;就写了 录音&#xff0c;播放 在语言模型中&#xff0c;编码器和解码器都是由一个个的 Transformer 组件拼接在一起…

七牛云图片上传 前后端全过程

相关网址&#xff1a;七牛开发者中心 相关网站&#xff1a; 七牛开发者中心 上传流程概述 后端生成上传凭证&#xff1a;服务器端使用七牛云 SDK 生成上传凭证&#xff08;uptoken&#xff09;前端获取凭证&#xff1a;前端通过 API 向后端请求上传凭证前端上传图片&#xff1…

2025年AI生成PPT平台推荐榜单:五大智能工具革新演示创作体验

在数字化办公飞速发展的当下&#xff0c;AI生成PPT平台已成为职场人士、教育工作者和创意人群提升效率的利器。这些平台凭借先进的人工智能技术&#xff0c;打破传统PPT制作的局限&#xff0c;为用户带来便捷、高效且充满创意的制作体验。经过多维度测评&#xff0c;2025年AI生…

PHP框架在内容管理系统开发中的优势:效率、安全与扩展性!

在当今快节奏的Web开发环境中&#xff0c;内容管理系统&#xff08;CMS&#xff09;已成为企业和个人建立动态网站的核心工具。传统的手工编码开发方式在面对复杂业务逻辑、频繁迭代和安全要求时往往力不从心。而PHP框架&#xff08;如Laravel、ThinkPHP、Symfony&#xff09;的…

云原生安全实践:CI/CD流水线集成DAST工具

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——从零掌握DevSecOps中的动态安全测试 一、基础概念 1. DevSecOps DevSecOps 是将安全性&#xff08;Security&#xff09;融入开发&#xff08;Dev&am…

【C语言】基础知识框架补充

前文主要介绍了C语言从零开始学习的基本框架与基础知识导览&#xff0c;本文主要补充此前未提及的学习内容&#xff0c;给有意精进C语言者指明一条可供参考的学习路径。 补充一&#xff1a;动态内存管理 核心函数&#xff08;需#include <stdlib.h>&#xff09;&#xf…

垃圾识别检测与分类数据集(猫脸码客第244期)

目标检测与垃圾&#xff1a;技术革新与环境管理的交汇点 在当今社会&#xff0c;城市化进程不断加速&#xff0c;人口持续增长&#xff0c;垃圾处理问题愈发凸显其重要性。有效管理垃圾&#xff0c;不仅关乎环境卫生状况&#xff0c;更直接影响到城市的可持续发展以及居民的生…

【调研报告】2025年与2030年AI及AI智能体 (Agent) 市场份额分析报告

2025年与2030年AI及AI智能体 (Agent) 市场份额分析报告 摘要 本报告旨在深入分析全球人工智能&#xff08;AI&#xff09;市场及其子领域AI智能体的未来发展轨迹&#xff0c;重点关注其在2025年和2030年的市场规模及其占全球GDP和整体AI市场的比例。分析表明&#xff0c;AI市…

台式机电脑CPU天梯图2025年6月份更新:CPU选购指南及推荐

组装电脑选硬件的过程中,CPU的选择无疑是最关键的,因为它是最核心的硬件,关乎着一台电脑的性能好坏。对于小白来说,CPU天梯图方便直接判断两款CPU性能高低,准确的说,是多核性能。下面给大家分享一下台式机电脑CPU天梯图2025年6月版,来看看吧。 桌面CPU性能排行榜2025 台…

小白学Pinia状态管理

目录 1. 什么是 Pinia&#xff1f; 2. 为什么需要 Pinia&#xff1f; 3. Pinia 的三个核心概念 State&#xff08;状态&#xff09;- 存储数据 Getters&#xff08;计算属性&#xff09;- 处理数据 Actions&#xff08;方法&#xff09;- 修改数据 4. 创建一个简单的 St…

Tauri2学习笔记

教程地址&#xff1a;https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引&#xff1a;https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多&#xff0c;我按照Tauri1的教程来学习&…

SQL进阶之旅 Day 26:分库分表环境中的SQL策略

【SQL进阶之旅 Day 26】分库分表环境中的SQL策略 文章简述 随着业务规模的扩大&#xff0c;单一数据库难以承载海量数据与高并发访问。分库分表成为解决这一问题的关键手段&#xff0c;但同时也带来了 SQL 查询复杂度的显著提升。本文作为“SQL进阶之旅”系列的第26天内容&…

linux之 内存管理(6)-arm64 内核虚拟地址空间变化

一、新内核变动 kernel变化的真快&#xff0c;之前我记得4.x的内核的内核空间的线性映射区位于内核空间的高地址处的128TB&#xff0c;且当前的博客和一些书籍也都还是这样介绍。可翻了翻kernel的Documentation/arm64/memory.rst文档&#xff0c;发现最新的kernel已将这128TB移…