目录

行为

在 1.8.0 版本加入.

行为混入类

该模块实现了可与现有基础控件“混合”的行为,这些行为可以像`混合`一样被添加到控件中。这些类的设计理念在于封装与特定类型控件相关联的属性和事件。

将这些属性和事件隔离在一个mixin类中,允许您为标准的Kivy小部件定义自己的实现,这些实现可以作为直接替换品。这意味着您可以根据需要重新样式化和重新定义小部件,而不会破坏兼容性:只要它们正确实现了这些行为,就可以简单地替换标准小部件。

添加行为

假设你想为 Image 添加 Button 的功能,你可以这样做:

class IconButton(ButtonBehavior, Image):
    pass

这将为您提供一个继承自:class:`ButtonBehavior`的事件和属性的:class:`~kivy.uix.image.Image`实例。例如,*on_press*和*on_release*事件将在适当时触发:

class IconButton(ButtonBehavior, Image):
    def on_press(self):
        print("on_press")

或者在kv中:

IconButton:
    on_press: print('on_press')

当然,您也可以绑定到行为类所提供的任何属性变化。

def state_changed(*args):
    print('state changed')

button = IconButton()
button.bind(state=state_changed)

备注

行为类必须始终位于控件类_之前_。如果你不按此顺序指定继承,行为将无法正常工作,因为行为方法会被列在首位的类方法覆盖。

同样地,如果你将一个行为类与一个需要使用该行为类所定义方法的类结合,生成的类可能无法正常工作。例如,当将:class:`ButtonBehavior`与:class:`~kivy.uix.slider.Slider`结合时,两者都使用了:meth:`~kivy.uix.widget.Widget.on_touch_up`方法,生成的类可能无法正常工作。

在 1.9.1 版本发生变更: 各个行为类,原先集中在一个大的 behaviors.py 文件中,现已被拆分为 :mod:`~kivy.uix.behaviors` 模块下每个类单独一个文件。所有行为仍然在 :mod:`~kivy.uix.behaviors` 模块中导入,因此它们可以像以前一样访问(例如,from kivy.uix.behaviors import ButtonBehaviorfrom kivy.uix.behaviors.button import ButtonBehavior 都可以正常工作)。

class kivy.uix.behaviors.ButtonBehavior(**kwargs)[源代码]

基类:object

这个 mixin 类提供了 Button 的行为。更多信息请参阅 按钮行为模块 的文档。

事件:
on_press

当按钮被按下时触发。

on_release

当按钮被释放时触发(即按下按钮的触摸/点击消失)。

always_release

此属性决定当触摸释放(touch_up)发生在控件外部时,该控件是否触发 on_release 事件。

在 1.9.0 版本加入.

在 1.10.0 版本发生变更: 默认值现在为False。

always_release 是一个 BooleanProperty,默认值为 False

last_touch

包含按钮接收到的最后一个相关触摸。这可以在`on_press`或`on_release`中使用,以了解哪个触摸触发了该事件。

在 1.8.0 版本加入.

last_touch 是一个 ObjectProperty,默认值为 None

min_state_time

控件必须保持在 'down' 状态的最短时间周期。

在 1.9.1 版本加入.

min_state_time 是一个浮点数,默认值为 0.035。该值取自 Config

state

按钮的状态,必须是'normal'或'down'之一。只有当按钮当前被触摸/点击时,状态才为'down',否则为'normal'。

state 是一个 OptionProperty,默认值为 'normal'。

trigger_action(duration=0.1)[源代码]

通过调用on_press和on_release回调,触发已绑定到按钮的任何操作。

这类似于不使用任何触摸事件的快速按钮按下,但请注意,与大多数kivy代码一样,不能保证从外部线程调用此操作是安全的。如有需要,请使用:class:`Clock <kivy.clock.Clock>`来安全地调度此函数及其回调在主线程中执行。

Duration 是按压持续的时间(秒)。若希望操作立即发生,请传入 0。

在 1.8.0 版本加入.

class kivy.uix.behaviors.CodeNavigationBehavior[源代码]

基类:EventDispatcher

代码导航行为。修改TextInput中的导航行为,使其像IDE而非文字处理器那样工作。更多信息请参阅:mod:`代码导航行为模块 <kivy.uix.behaviors.codenavigation>`的文档。

在 1.9.1 版本加入.

class kivy.uix.behaviors.CompoundSelectionBehavior(**kwargs)[源代码]

基类:object

选择行为 mixin 实现了由派生控件管理的可选中控件的键盘和触摸选择逻辑。有关更多信息,请参阅 复合选择行为模块 的文档。

在 1.9.0 版本加入.

clear_selection()[源代码]

取消选择当前所有已选中的节点。

deselect_node(node)[源代码]

取消选中可能已选中的节点。

当控制器取消选择一个节点时,会调用此方法;也可以从外部直接调用以取消选择节点。派生的小部件应重写此方法,并在调用时将节点更改为其未选中状态。

参数:
node

要取消选择的节点。

警告

如果该方法被覆盖,派生控件必须使用super调用它。

get_index_of_node(node, selectable_nodes)[源代码]

(内部)返回 nodeget_selectable_nodes() 返回的 selectable_nodes 中的索引。

get_selectable_nodes()[源代码]

(内部)返回可被选中的节点列表。派生控件可覆盖此方法以返回正确的列表。

该列表用于确定组选择时要选中的节点。例如,当按下Home键时,将选择列表中的最后一个元素;按下PageDown键时,将从当前选中节点在此列表中的位置开始,按负的:attr:`page_count`节点数移动(若按住Shift键,则添加)选择范围,依此类推。尽管如此,即使节点不在该列表中,它们仍可被选中。

备注

动态修改此列表是安全的,包括移除、添加或重新排列其元素。即使节点不在列表中,也可以被选中。从列表中移除的已选中节点将保持选中状态,直到调用 deselect_node() 方法。

警告

布局会以相反的顺序显示其子组件。也就是说,children 的内容是从右到左、从下到上显示的。因此,在内部,此函数返回的元素索引会被反转,以便默认情况下适用于大多数布局,从而确保最终结果一致,例如,home 虽然在视觉上会选择此列表中的最后一个元素,但在从上到下、从左到右计数时会选择第一个元素。如果不需要此行为,则应返回一个反转后的列表。

默认返回 children

goto_node(key, last_node, last_node_idx)[源代码]

(内部)控制器使用此方法获取由键指示的位置处的节点。键可以是键盘输入,例如 pageup,或鼠标滚轮的滚动输入,例如 scrollup。'last_node' 是最后选中的节点,用于查找结果节点。例如,如果键是向上,则返回的节点是位于最后一个节点上方的一个节点。

它可以被派生的小部件覆盖。

参数:
key

str,用于查找目标节点的字符串。它可以是任意键盘按键,也可以是鼠标的scrollup、scrolldown、scrollright和scrollleft字符串。如果字母快速连续输入,这些字母会在作为key传入前被合并,可用于查找关联字符串以这些字母开头的节点。

last_node

最后选中的节点。

last_node_idx

get_selectable_nodes() 列表中,最后选中节点的缓存索引。如果列表未发生变化,则无需在该列表中查找 last_node 的索引,从而节省了查找时间。

返回:

元组,包含由键定位的节点及其在 get_selectable_nodes() 列表中的索引。返回 (last_node, last_node_idx) 表示未找到节点。

keyboard_select

决定键盘是否可用于选择。若为False,键盘输入将被忽略。

keyboard_select 是一个 BooleanProperty,默认值为 True。

multiselect

决定是否可以选择多个节点。若启用,键盘的Shift和Ctrl键选择,可选地与触摸结合,例如,将能够以通常预期的方式选择多个部件。当此属性为False时,它优先于 touch_multiselect

multiselect 是一个 BooleanProperty,默认值为 False。

nodes_order_reversed

(内部)指示节点自上而下显示的顺序是否与它们在 get_selectable_nodes() 中的顺序相反(例如,children 属性的顺序与其显示顺序相反)。

page_count

确定按下pageup(或pagedown)时,所选节点相对于上次所选节点位置向上或向下移动的量。

page_count 是一个 NumericProperty,默认值为 10。

right_count

决定当键盘上的右(或左)箭头被按下时,所选节点相对于上一个选中节点位置向上或向下移动的量。

right_count 是一个 NumericProperty,默认值为 1。

scroll_count

确定鼠标滚轮滚动时,所选节点相对于上一个所选节点位置上下移动的量。

right_count 是一个 NumericProperty,默认值为 0。

select_node(node)[源代码]

选择节点。

当控制器选中一个节点时,会调用此方法;也可以从外部直接调用以选中节点。派生的小部件应重写此方法,并在被调用时将节点状态更改为选中状态。

参数:
node

要选择的节点。

返回:

bool,若节点被选中则为True,否则为False。

警告

如果该方法被覆盖,派生控件必须使用super调用它。

select_with_key_down(keyboard, scancode, codepoint, modifiers, **kwargs)[源代码]

处理按键按下事件。当按键按下用于选择时,会调用此方法。根据按下的键盘按键和配置,它可以从可选节点列表(get_selectable_nodes())中选择或取消选择节点或节点范围。

参数设置使其可以直接绑定到键盘的on_key_down事件。因此,当按键被按住时,像键盘那样重复调用它是安全的。

返回:

布尔值,如果按键被使用则为True,否则为False。

select_with_key_up(keyboard, scancode, **kwargs)[源代码]

(内部)处理按键释放。当派生控件检测到 select_with_key_down() 返回 True 的按键被释放时,必须调用此方法。

这些参数的设计使其可以直接绑定到键盘的on_key_up事件上。

返回:

bool,如果按键释放被使用则为True,否则为False。

select_with_touch(node, touch=None)[源代码]

(内部)处理节点上的触摸事件。当节点被触摸并用于选择时,派生控件应调用此方法。根据按下的键盘按键和配置,它可能会选择或取消选择此节点以及可选中节点列表中的其他节点,参见 get_selectable_nodes()

参数:
node

接收触摸的节点。对于滚动类型的触摸,该值可能为 None。

touch

可选参数,触摸事件。默认为 None。

返回:

bool,若触摸已被使用则为True,否则为False。

selected_nodes

所选节点的列表。

备注

可以连续选择多个节点,例如使用键盘操作。在监听 selected_nodes 时,需要注意这一点。

selected_nodes 是一个 ListProperty,默认值为空列表 []。它是只读的,不应被修改。

text_entry_timeout

当快速连续输入字符时(即与上一个字符的时间差小于 text_entry_timeout),这些按键会被拼接起来,并将合并后的文本作为 goto_node() 的 key 参数传递。

在 1.10.0 版本加入.

touch_deselect_last

multiselecttouch_multiselect 为 False 时,决定最后一个选中的节点是否可以被取消选中。

在 1.10.0 版本加入.

touch_deselect_last 是一个 BooleanProperty,在移动设备上默认为 True,在桌面平台上默认为 False。

touch_multiselect

一种特殊的触摸模式,用于决定由 select_with_touch() 处理的触摸事件是将当前触摸的节点添加到选中集合中,还是在添加节点前清除选中集合。此模式允许通过简单触摸多个节点来实现多选。

这与 multiselect 不同,因为当其为 True 时,仅触摸一个未选中的节点就会将其选中,即使未按下 ctrl 键也是如此。然而,如果其为 False,则在 multiselect 为 True 时,必须按下 ctrl 键才能添加到选中项中。

备注

:属性 multiselect,当设为 False 时,将禁用 touch_multiselect

touch_multiselect 是一个 BooleanProperty,默认值为 False。

up_count

决定当键盘上的上(或下)箭头被按下时,所选节点相对于上一个选中节点位置向上或向下移动的距离。

up_count 是一个 NumericProperty,默认值为 1。

class kivy.uix.behaviors.CoverBehavior(**kwargs)[源代码]

基类:object

CoverBehavior mixin 提供了一种渲染方式,使纹理覆盖整个控件大小,同时保持原始纹理的宽高比。

在 1.10.0 版本加入.

cover_pos

宽高比感知纹理的位置。在 CoverBehavior.calculate_cover 中计算得出。

cover_pos 是一个 ListProperty,默认值为 [0, 0]

cover_size

宽高比感知纹理的尺寸。在 CoverBehavior.calculate_cover 中计算得出。

cover_size 是一个 ListProperty,默认值为 [0, 0]

reference_size

用于宽高比近似计算的参考尺寸。

reference_size 是一个 ListProperty,默认值为 []

class kivy.uix.behaviors.DragBehavior(**kwargs)[源代码]

基类:object

DragBehavior mixin 提供了拖拽行为。当与一个部件结合时,在由 drag_rectangle 定义的矩形内进行拖拽将移动该部件。更多信息请参阅 拖拽行为模块 的文档。

在 1.8.0 版本加入.

drag_distance

拖动 DragBehavior 之前需要移动的距离,单位为像素。一旦达到该距离,DragBehavior 将开始拖动,并且不会向子组件派发触摸事件。建议您根据目标设备屏幕的 dpi 来设定此值。

drag_distance 是一个 NumericProperty,默认值等于用户 Config 中定义的 `scroll_distance`(默认20像素)。

drag_rect_height

允许拖拽的轴对齐边界矩形的高度。

drag_rect_height 是一个 NumericProperty,默认值为 100。

drag_rect_width

允许拖拽的轴对齐边界矩形的宽度。

drag_rect_width 是一个 NumericProperty,默认值为 100。

drag_rect_x

允许拖动的轴对齐边界矩形的X位置(以窗口坐标表示)。

drag_rect_x 是一个 NumericProperty,默认值为 0。

drag_rect_y

允许拖动的轴对齐边界矩形的Y坐标位置(以窗口坐标表示)。

drag_rect_Y 是一个 NumericProperty,默认值为 0。

drag_rectangle

允许拖动的轴对齐边界矩形的位置和大小。

drag_rectangle 是一个 ReferenceListProperty,由 (drag_rect_x, drag_rect_y, drag_rect_width, drag_rect_height) 属性组成。

drag_timeout

允许触发 drag_distance 的超时时间,单位为毫秒。如果用户在此超时时间内未移动 drag_distance,则拖拽将被禁用,触摸事件将分发给子组件。

drag_timeout 是一个 NumericProperty,默认值为用户 Config 中定义的 `scroll_timeout`(默认55毫秒)。

class kivy.uix.behaviors.EmacsBehavior(**kwargs)[源代码]

基类:object

一个 mixin,为 TextInput 控件启用 Emacs 风格的键盘快捷键。更多信息请参阅 Emacs 行为模块 的文档。

在 1.9.1 版本加入.

delete_word_left()[源代码]

删除光标左侧至单词开头的文本

delete_word_right()[源代码]

删除光标右侧至单词末尾的文本。

key_bindings

字符串名称,用于确定与 TextInput 一起使用的键绑定类型。这允许以编程方式为继承自 EmacsBehavior 的控件启用或禁用 Emacs 键绑定。如果该值不是 'emacs',则 Emacs 绑定将被禁用。使用 'default' 可切换到 TextInput 的默认键绑定。

key_bindings 是一个 StringProperty,默认值为 'emacs'

在 1.10.0 版本加入.

class kivy.uix.behaviors.FocusBehavior(**kwargs)[源代码]

基类:object

提供键盘焦点行为。当与其他FocusBehavior控件结合使用时,它允许通过按Tab键在它们之间循环焦点。更多信息请参阅:mod:焦点行为模块文档 <kivy.uix.behaviors.focus>

在 1.9.0 版本加入.

focus

实例当前是否具有焦点。

将其设为True将绑定和/或请求键盘,输入将被转发到该实例。设为False将解除绑定和/或释放键盘。对于给定的键盘,只有一个控件能拥有焦点,因此聚焦一个控件会自动取消另一个持有焦点的实例的焦点。

使用软件键盘时,请参考 softinput_mode 属性来确定键盘显示的处理方式。

focus 是一个 BooleanProperty,默认值为 False。

focus_next

当按下Tab键且此实例拥有焦点时,要获取焦点的:class:FocusBehavior`实例,如果该值不为`None`或`StopIteration

当按下 Tab 键时,焦点会在所有通过 focus_next 链接且可聚焦的 FocusBehavior 控件之间循环。如果 focus_nextNone,则会遍历子控件列表以查找下一个可聚焦的控件。最后,如果 focus_nextStopIteration 类,焦点将不会向前移动,而是在此处结束。

focus_next 是一个 ObjectProperty,默认值为 None

focus_previous

当在此实例上按下shift+tab时,要获取焦点的:class:`FocusBehavior`实例,如果为None或`StopIteration`则忽略。

当按下shift+tab时,焦点会循环遍历所有通过:attr:focus_previous`链接且可聚焦的:class:`FocusBehavior`控件。如果:attr:`focus_previous`为`None,则改为遍历子控件树以查找上一个可聚焦的控件。最后,如果:attr:`focus_previous`是`StopIteration`类,焦点将不会向后移动,而是在此处结束。

focus_previous 是一个 ObjectProperty,默认值为 None

focused

focus 的别名。

focused 是一个 BooleanProperty,默认值为 False。

警告

focusedfocus 的别名,将在 2.0.0 版本中移除。

get_focus_next()[源代码]

使用 focus_nextchildren 返回下一个可聚焦的控件,其顺序与使用 tab 键向前切换焦点时的顺序相同。

get_focus_previous()[源代码]

返回上一个可聚焦的控件,使用 focus_previouschildren,其顺序与同时按下 tab + shift 键时一致。

hide_keyboard()[源代码]

在管理模式下隐藏键盘的便捷函数。

ignored_touch = []

不应被用于取消焦点的触摸列表。在`on_touch_up`之后,如果配置的键盘模式不是多模式,那么不在:attr:`ignored_touch`中的每个触摸都将取消所有聚焦部件的焦点。用于聚焦的可聚焦部件上的触摸会自动添加到此列表中。

示例用法:

class Unfocusable(Widget):

    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            FocusBehavior.ignored_touch.append(touch)

请注意,你需要将其作为类来访问,而不是作为实例变量。

input_type

请求的输入键盘类型。

在 1.8.0 版本加入.

在 2.1.0 版本发生变更: 将默认值从 text 改为 null。在选项中添加了 null

警告

由于默认值已更改,您可能需要在代码中调整 input_type

input_type 是一个 OptionsProperty,默认值为 'null'。可选值包括 'null'、'text'、'number'、'url'、'mail'、'datetime'、'tel' 或 'address'。

is_focusable

实例是否可以获得焦点。如果已获得焦点,当设置为False时,它将失去焦点。

is_focusable 是一个 BooleanProperty,在桌面平台上默认为 True(即 config 中的 desktop 为 True),否则默认为 False。

keyboard

聚焦时绑定的键盘(或绑定到部件的键盘)。

当为None时,每当控件获得或失去焦点时,会请求并释放键盘。如果不为None,则必须是一个键盘,该键盘会在控件获得或失去焦点时与之绑定和解绑。这仅在存在多个键盘时才有用,因此当只有一个键盘可用时,建议将其设置为None。

如果存在多个键盘,每当一个实例获得焦点时,若当前没有键盘(None),则会请求一个新的键盘。除非其他实例失去焦点(例如,使用了Tab键),否则会出现一个新的键盘。当不希望出现这种情况时,可以使用`keyboard`属性。例如,如果有两个用户分别使用两个键盘,则可以将每个键盘分配给`FocusBehavior`的不同实例组,确保在每个组内,只有一个`FocusBehavior`会获得焦点,并从正确的键盘接收输入。有关键盘模式的更多信息,请参阅:mod:~kivy.config`中的`keyboard_mode

键盘与焦点行为

使用键盘时,有几个重要的默认行为需要您牢记。

  • 当Config的`keyboard_mode`设置为multi时,每个新的触摸事件被视为不同用户的触摸,并会在点击可聚焦元素时设置焦点(如果点击了可聚焦元素),同时使用新的键盘。已聚焦的元素不会失去焦点(即使触摸了不可聚焦的控件)。

  • 如果设置了 keyboard 属性,那么当实例获得焦点时,将使用该键盘。如果通过 focus_nextfocus_previous 链接了具有不同键盘的控件,则在它们之间进行 Tab 切换时,不同的键盘会依次变为活动状态。因此,通常不建议链接分配了不同键盘的实例。

  • 当控件获得焦点时,将其键盘设置为None会移除其键盘,但该控件随后会立即尝试获取另一个键盘。要移除其键盘,应将其 focus 属性设置为False。

  • 在使用软件键盘时(常见于移动设备和触摸设备),键盘的显示行为由 softinput_mode 属性决定。您可以使用此属性来确保焦点控件不被遮挡或隐藏。

keyboard 是一个 AliasProperty,默认值为 None。

keyboard_mode

决定键盘可见性的管理方式。'auto' 将采用标准行为,即根据焦点自动显示/隐藏。'managed' 则需要手动设置键盘可见性,或调用辅助函数 show_keyboard()hide_keyboard()

keyboard_mode 是一个 OptionsProperty,默认值为 'auto'。它可以是 'auto' 或 'managed' 中的一个。

keyboard_on_key_down(window, keycode, text, modifiers)[源代码]

当实例获得焦点时,绑定到键盘的方法。

当实例获得焦点时,此方法会绑定到键盘,并在每次按键输入时被调用。其参数与 kivy.core.window.WindowBase.on_key_down() 相同。

在派生组件中重写该方法时,应调用super以启用Tab键循环。如果派生组件希望将Tab键用于自身目的,则可以在处理字符后调用super(如果它不希望消耗Tab键)。

与其他键盘函数类似,如果按键已被消耗,则应返回True。

keyboard_on_key_up(window, keycode)[源代码]

当实例获得焦点时,绑定到键盘的方法。

当实例获得焦点时,此方法会绑定到键盘,并在每次输入释放时被调用。其参数与 kivy.core.window.WindowBase.on_key_up() 相同。

在派生组件中重写该方法时,应调用`super`以支持按Escape键取消焦点。若派生组件希望将Escape键用于自身用途,可在处理完该字符后调用`super`(若其不希望消费该Escape键)。

参见 keyboard_on_key_down()

keyboard_suggestions

如果为 True,则在键盘上方提供自动建议。这仅在 input_type 设置为 texturlmailaddress 时有效。

警告

在Android上,keyboard_suggestions`依赖于`InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS`来生效,但有些键盘会忽略这个标志。如果你想在Android上完全禁用建议,可以将`input_type`设置为`null,这将请求输入法以受限的“生成按键事件”模式运行。

在 2.1.0 版本加入.

keyboard_suggestions 是一个 BooleanProperty,默认值为 True。

show_keyboard()[源代码]

便捷函数,用于在管理模式中显示键盘。

unfocus_on_touch

实例在被点击外部时是否应失去焦点。

当用户点击一个具有焦点感知能力且与此控件共享同一键盘(在只有一个键盘的情况下)的控件时,随着其他控件获得焦点,此控件将失去焦点。此外,如果此属性为`True`,点击除该控件以外的任何控件,都会从此控件上移除焦点。

unfocus_on_touch 是一个 BooleanProperty,如果 Config 中的 keyboard_mode'multi''systemandmulti',则默认值为 False,否则默认值为 True

class kivy.uix.behaviors.ToggleButtonBehavior(**kwargs)[源代码]

基类:ButtonBehavior

这个 mixin 类提供了 togglebutton 的行为。更多信息请参阅 togglebutton 行为模块 的文档。

在 1.8.0 版本加入.

allow_no_selection

这指定了组中的小部件是否允许无选择,即所有项都可以被取消选中。

在 1.9.0 版本加入.

allow_no_selection 是一个 BooleanProperty,默认值为 True

static get_widgets(groupname)[源代码]

返回特定组中包含的控件列表。如果该组不存在,将返回一个空列表。

备注

务必释放此方法的返回值!持有这些任何控件的引用可能会阻止它们被垃圾回收。如有疑问,请执行以下操作:

l = ToggleButtonBehavior.get_widgets('mygroup')
# do your job
del l

警告

你之前删除的一些控件可能仍留在列表中。垃圾回收器可能需要先释放其他对象,才能将它们清除。

group

按钮的组。如果为 None,则不使用组(按钮将是独立的)。如果指定了,:attr:`group` 必须是一个可哈希对象,比如字符串。在一个组中,只能有一个按钮处于“按下”状态。

group 是一个 ObjectProperty,默认值为 None

class kivy.uix.behaviors.TouchRippleBehavior(**kwargs)[源代码]

基类:object

触摸波纹行为。

应作为mixin用于widget类上。

涟漪效果不会自动触发,具体实现需要手动调用 ripple_show()ripple_fade()

示例

这里我们创建了一个Label,它在交互时渲染触摸波纹动画::

class RippleLabel(TouchRippleBehavior, Label):

    def __init__(self, **kwargs):
        super(RippleLabel, self).__init__(**kwargs)

    def on_touch_down(self, touch):
        collide_point = self.collide_point(touch.x, touch.y)
        if collide_point:
            touch.grab(self)
            self.ripple_show(touch)
            return True
        return False

    def on_touch_up(self, touch):
        if touch.grab_current is self:
            touch.ungrab(self)
            self.ripple_fade()
            return True
        return False
ripple_duration_in

显示覆盖层所需的动画持续时间。

ripple_duration_in 是一个 NumericProperty,默认值为 0.5

ripple_duration_out

覆盖层淡入淡出所需的动画持续时间。

ripple_duration_out 是一个 NumericProperty,默认值为 0.2

ripple_fade()[源代码]

完成当前控件上的涟漪动画。

ripple_fade_from_alpha

波纹颜色动画起始时的Alpha通道。

ripple_fade_from_alpha 是一个 NumericProperty,默认值为 0.5

ripple_fade_to_alpha

动画目标所指向的波纹颜色的Alpha通道。

ripple_fade_to_alpha 是一个 NumericProperty,默认值为 0.8

ripple_func_in

显示覆盖层的动画回调。

ripple_func_in 是一个 StringProperty,默认值为 in_cubic

ripple_func_out

隐藏覆盖层的动画回调。

ripple_func_out 是一个 StringProperty,默认值为 out_quad

ripple_rad_default

动画开始的默认半径。

ripple_rad_default 是一个 NumericProperty,默认值为 10

ripple_scale

动画叠加层的最大缩放比例,根据装饰控件的最大(宽度/高度)计算得出。

ripple_scale 是一个 NumericProperty,默认值为 2.0

ripple_show(touch)[源代码]

在当前控件上开始波纹动画。

将触摸事件作为参数。

class kivy.uix.behaviors.TouchRippleButtonBehavior(**kwargs)[源代码]

基类:TouchRippleBehavior

这个 mixin 类提供了与 ButtonBehavior 类似的行为,但以触摸涟漪动画替代按钮按下/释放作为视觉效果。

事件:
on_press

当按钮被按下时触发。

on_release

当按钮被释放时触发(即按下按钮的触摸/点击消失)。

always_release

此属性决定当触摸释放(touch_up)发生在控件外部时,该控件是否触发 on_release 事件。

always_release 是一个 BooleanProperty,默认值为 False

last_touch

包含按钮接收到的最后一个相关触摸。这可以在`on_press`或`on_release`中使用,以了解哪个触摸触发了该事件。

last_touch 是一个 ObjectProperty,默认值为 None