- Kivy 教程
- Kivy - 首页
- Kivy 基础
- Kivy - 开始入门
- Kivy - 安装
- Kivy - 架构
- Kivy - 文件语法
- Kivy - 应用
- Kivy - Hello World
- Kivy - 应用生命周期
- Kivy - 事件
- Kivy - 属性
- Kivy - 输入
- Kivy - 行为
- Kivy 按钮
- Kivy - 按钮
- Kivy - 按钮事件
- Kivy - 按钮颜色
- Kivy - 按钮大小
- Kivy - 按钮位置
- Kivy - 圆形按钮
- Kivy - 禁用按钮
- Kivy - 图片按钮
- Kivy 小部件
- Kivy - 小部件
- Kivy - 标签
- Kivy - 文本输入
- Kivy - 画布
- Kivy - 直线
- Kivy - 复选框
- Kivy - 下拉列表
- Kivy - 窗口
- Kivy - 滚动视图
- Kivy - 轮播图
- Kivy - 滑块
- Kivy - 图片
- Kivy - 弹出窗口
- Kivy - 开关
- Kivy - 微调器
- Kivy - 分隔器
- Kivy - 进度条
- Kivy - 气泡
- Kivy - 标签页面板
- Kivy - 散点图
- Kivy - 手风琴
- Kivy - 文件选择器
- Kivy - 颜色拾取器
- Kivy - 代码输入
- Kivy - 模态视图
- Kivy - 切换按钮
- Kivy - 相机
- Kivy - 树视图
- Kivy - reStructuredText
- Kivy - 操作栏
- Kivy - 播放器
- Kivy - 模板视图
- Kivy - 虚拟键盘
- Kivy - 触摸涟漪
- Kivy - 音频
- Kivy - 视频
- Kivy - 拼写
- Kivy - 效果
- Kivy - 输入记录器
- Kivy - OpenGL
- Kivy - 文本
- Kivy - 文本标记
- Kivy - 设置
- Kivy 布局
- Kivy - 布局
- Kivy - 浮动布局
- Kivy - 网格布局
- Kivy - 盒子布局
- Kivy - 堆叠布局
- Kivy - 锚点布局
- Kivy - 相对布局
- Kivy - 页面布局
- Kivy - 回收布局
- Kivy - 布局嵌套
- Kivy 高级概念
- Kivy - 配置对象
- Kivy - 图集
- Kivy - 数据加载器
- Kivy - 缓存管理器
- Kivy - 控制台
- Kivy - 动画
- Kivy - 多笔画
- Kivy - 时钟
- Kivy - SVG
- Kivy - UrlRequest
- Kivy - 剪贴板
- Kivy - 工厂
- Kivy - 手势
- Kivy - 语言
- Kivy - 图形
- Kivy - 绘图
- Kivy - 打包
- Kivy - Garden
- Kivy - 存储
- Kivy - 向量
- Kivy - 工具
- Kivy - 检查器
- Kivy - 工具
- Kivy - 日志记录器
- Kivy - 帧缓冲区
- Kivy 应用和项目
- Kivy - 绘图应用
- Kivy - 计算器应用
- Kivy - 计时器应用
- Kivy - 相机处理
- Kivy - 图片查看器
- Kivy - 贝塞尔曲线
- Kivy - 画布压力测试
- Kivy - 圆形绘制
- Kivy - 小部件动画
- Kivy - 其他
- Kivy 有用资源
- Kivy - 快速指南
- Kivy - 有用资源
- Kivy - 讨论
Kivy - 属性
属性是Kivy中一个特殊的类,允许你定义和管理小部件或对象的属性。“kivy.properties”模块中定义了Property类。你可以跟踪这些属性的变化,并且可以绑定回调函数,以便在属性改变时执行。
Kivy的属性类支持以下特性:
值检查/验证
每当为属性分配新值时,都会根据验证约束对其进行检查,以防止错误。例如,OptionProperty的验证将确保该值位于预定义的可能性列表中。NumericProperty的验证将检查你的值是否为数字类型。
观察者模式
你可以指定属性值改变时应该发生什么。你可以将自己的函数绑定为Property更改的回调。例如,如果你想在小部件的pos属性改变时调用一段代码,你可以将一个函数绑定到它。
更好的内存管理
同一属性实例在多个小部件实例之间共享。
需要注意的是,Property对象与Python中内置的property()函数不同。
属性对象必须在类级别声明,而不是在类的任何方法中。
默认情况下,每个属性都提供一个“on_
”事件,每当属性的状态/值改变时都会调用该事件。
示例
让我们通过以下示例来学习Kivy中Property的行为。App类有一个NumericProperty属性。NumericProperty对象(value)绑定到on_value_change()方法。
class NumPropApp(App): value = NumericProperty(0) def on_value_change(self, instance, value): print(f"Value changed: {value}") self.l1.text = str(value)
在build()方法中,应用程序有一个Label和一个Button,它们在一个垂直的BoxLayout中组合在一起。Button响应on_press事件调用onstart()方法,并将value加1。
def onstart(self, event): print ("started") self.value = self.value+1 def build(self): lo = BoxLayout(orientation='vertical') self.l1 = Label(text=str(self.value), font_size = 50) self.b1 = Button(text = "start", font_size = 50) self.b1.bind(on_press=self.onstart) self.bind(value=self.on_value_change) lo.add_widget(self.l1) lo.add_widget(self.b1) return lo
由于“on_value_change()”方法在每次value改变时都会被调用,因此每次按下按钮时,标签标题都会显示从“0”开始递增的数字。
以下是该示例的完整代码:
from kivy.app import App from kivy.uix.label import Label from kivy.uix.button import Button from kivy.properties import NumericProperty from kivy.uix.boxlayout import BoxLayout from kivy.config import Config # Configuration Config.set('graphics', 'width', '720') Config.set('graphics', 'height', '400') Config.set('graphics', 'resizable', '1') class NumPropApp(App): value = NumericProperty(0) def on_value_change(self, instance, value): print(f"Value changed: {value}") self.l1.text = str(value) def onstart(self, event): print ("started") self.value = self.value+1 def build(self): lo = BoxLayout(orientation='vertical') self.l1 = Label(text=str(self.value), font_size = 50) self.b1 = Button(text = "start", font_size = 50) self.b1.bind(on_press=self.onstart) self.bind(value=self.on_value_change) lo.add_widget(self.l1) lo.add_widget(self.b1) return lo if __name__ == '__main__': NumPropApp().run()
输出
从命令行运行程序。按下按钮,你会看到标签上显示的数字每次都会增加。
属性类型
Kivy提供以下属性类型:
NumericProperty - 处理数值,例如整数和浮点数。它只接受int或float数值数据类型,或者可以转换为数字的字符串。
count = NumericProperty(0)
StringProperty - 用于处理字符串值。你可以使用“defaultvalue”参数对其进行初始化。
text = StringProperty("start")
BoundedNumericProperty - 此属性类似于NumericProperty,但允许你为值定义最小和最大边界。它还支持get_min()和get_max()方法,它们分别返回最小和最大可接受的值。
a = BoundedNumericProperty(1, min=0, max=100)
BooleanProperty - 处理布尔值(True或False)。defaultvalue参数可以设置为True或False。
active = BooleanProperty(False)
ListProperty - 此属性的值是一个List对象。将列表赋值给ListProperty时,存储在属性中的列表是列表的浅拷贝,而不是原始列表。
colors = ListProperty([1, 0, 0, 1])
ObjectProperty - 处理单个对象实例。如果rebind参数设置为True,则当任何中间属性更改时,关联的kv规则将被重新评估,所有属性都将被重新绑定。
person = ObjectProperty(None)
OptionProperty - 指定属性的默认值。它应该是Options参数中给出的列表中的一个。示例:
state = OptionProperty("None", options=["On", "Off", "None"])
ReferenceListProperty - 此属性用于引用其他类型的多个属性对象。
x = NumericProperty(0) y = NumericProperty(0) z = ReferenceListProperty(x, y)
更改“z”的值将自动相应地更改“x”和“y”的值。如果你读取“z”的值,它将返回一个包含“x”和“y”值的元组。
AliasProperty - 为现有属性提供别名或替代名称。
def _get_width(self): return self.size def _set_width(self, value): self.size = value width = AliasProperty(_get_width, _set_width)
DictProperty - 用于使用多个参数作为字典键来定义对象的初始值。
params = DictProperty({ 'xlog': False, 'xmin': 0, 'xmax': 100, 'ylog': False, 'ymin': 0, 'ymax': 100, 'size': (0, 0, 0, 0) })
VariableListProperty - 列表项并将其扩展到所需的列表大小。
obj = VariableListProperty(defaultvalue, length)
defaultvalue参数指定列表的默认值。length参数是一个整数,可以是2或4。
ConfigParserProperty - ConfigParserProperty允许你根据其他kivy属性自动监听和更改指定键的值。
ConfigParserProperty(defaultvalue, section, key, config)
ConfigParser由多个部分组成,每个部分都有多个与这些键关联的键值对。
username = ConfigParserProperty('', 'info', 'name', None)
ColorProperty - 处理各种格式的色彩值,例如RGB或十六进制。此属性可以赋值以下任何值:
0-1之间的3或4个浮点值的集合(kivy默认值)
格式为#rrggbb或#rrggbbaa的字符串
表示颜色名称的字符串(例如,“red”、“yellow”、“green”)