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 ScrollView 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 VKeyboard 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 Atlas Kivy 数据加载器 Kivy 缓存管理器 Kivy 控制台 Kivy 动画 Kivy MultiStroke Kivy 时钟 Kivy SVG Kivy UrlRequest Kivy 剪贴板 Kivy 工厂 Kivy 手势 Kivy 语言 Kivy 图形 Kivy 绘图 Kivy 打包 Kivy Garden Kivy 存储 Kivy 矢量 Kivy Utils Kivy Inspector 工具 Kivy 工具 Kivy 日志 Kivy 帧缓冲区

Kivy 应用程序和项目

Kivy 绘图应用程序 Kivy 计算器应用程序 Kivy 秒表应用程序 Kivy 相机处理 Kivy 图像查看器 Kivy 贝塞尔曲线 Kivy 画布应力 Kivy 圆形绘制 Kivy 小部件动画 Kivy 杂项

Kivy - Property

Property 是 Kivy 中的一个特殊类,它允许您定义和管理小部件或对象的属性。属性类在"kivy.properties"模块中定义。您可以跟踪这些属性的更改,它们允许您绑定要在属性更改时执行的回调函数。

Kivy 的属性类支持以下功能 −

值检查/验证

每当为属性分配新值时,都会根据验证约束进行检查,以防止出现错误。例如,OptionProperty 的验证将确保该值在预定义的可能性列表中。NumericProperty 的验证将检查您的值是否为数字类型。

观察者模式

您可以指定当属性值更改时应该发生什么。您可以将自己的函数绑定为对属性更改的回调。例如,如果您希望在小部件的 pos 属性发生更改时调用一段代码,则可以将函数绑定到它。

更好的内存管理

属性的同一实例在多个小部件实例之间共享。

  • 可能需要注意的是,Property 对象与 Python 中的 property() 内置函数不同。

  • 属性对象必须在类级别声明,而不是在类的任何方法中声明。

  • 每个属性默认提供一个"on_<propertyname>"事件,每当属性的状态/值发生变化时都会调用该事件。

示例

让我们通过以下示例研究 Kivy 中 Property 的行为。App 类具有 NumericProperty 属性。 NumericProperty 对象(值)绑定到 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() 方法并将值增加 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()"方法,因此每次按下按钮时,标签标题都会显示从"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 Properties

属性类型

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 参数是一个 int,可以是 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 的字符串

  • 表示颜色名称的字符串(例如"红色"、"黄色"、"绿色")