手风琴

在 1.0.8 版本加入.

_images/accordion.jpg

Accordion 控件是一种菜单形式,其中选项按垂直或水平方向堆叠,当聚焦(触摸)时,该项会展开以显示其内容。

Accordion 应包含一个或多个 AccordionItem 实例,每个实例应包含一个根内容部件。最终你会得到一个类似这样的树结构:

  • 手风琴

    • 手风琴项

      • 请提供需要翻译的英文内容。

    • 手风琴项

      • BoxLayout

        • 另一个用户内容1

        • 另一个用户内容2

    • 手风琴项

      • 好的,请发送需要翻译的英文内容。

当前实现将 AccordionItem 分为两个部分:

  1. 标题栏的一个容器

  2. 一个用于内容展示的容器。

标题栏由 Kv 模板构成。我们将了解如何创建新模板以自定义标题栏的设计。

警告

如果你看到类似这样的消息:

[WARNING] [Accordion] not have enough space for displaying all children
[WARNING] [Accordion] need 440px, got 100px
[WARNING] [Accordion] layout aborted.

这意味着你有太多子项,没有更多空间来显示内容。这是“正常”现象,不会采取任何操作。请尝试增加手风琴的空间或减少子项的数量。你也可以减小 Accordion.min_space 的值。

简单示例

from kivy.uix.accordion import Accordion, AccordionItem
from kivy.uix.label import Label
from kivy.app import App


class AccordionApp(App):
    def build(self):
        root = Accordion()
        for x in range(5):
            item = AccordionItem(title='Title %d' % x)
            item.add_widget(Label(text='Very big content\n' * 10))
            root.add_widget(item)
        return root


if __name__ == '__main__':
    AccordionApp().run()

自定义手风琴组件。

您可以增加标题栏的默认大小::

root = Accordion(min_space=60)

或将方向改为垂直:

root = Accordion(orientation='vertical')

AccordionItem 更具可配置性,您可以在项目折叠或展开时设置自定义标题背景::

item = AccordionItem(background_normal='image_when_collapsed.png',
    background_selected='image_when_selected.png')
class kivy.uix.accordion.Accordion(**kwargs)[源代码]

基类:Widget

Accordion 类。更多信息请参阅模块文档。

add_widget(widget, *args, **kwargs)[源代码]

将一个新部件添加为此部件的子部件。

参数:
widget: Widget

要添加到我们子控件列表中的控件。

index:整数,默认值为0

在列表中插入小部件的索引。请注意,默认值为0意味着小部件被插入到列表的开头,因此会绘制在其他同级小部件之上。关于索引和小部件层次结构的完整讨论,请参阅 小部件编程指南

在 1.0.5 版本加入.

canvas:字符串,默认为 None

用于添加控件画布的Canvas。可以是'before'、'after'或None(默认画布)。

在 1.9.0 版本加入.

>>> from kivy.uix.button import Button
>>> from kivy.uix.slider import Slider
>>> root = Widget()
>>> root.add_widget(Button())
>>> slider = Slider()
>>> root.add_widget(slider)
anim_duration

当选择新的手风琴项目时,动画的持续时间(以秒为单位)。

anim_duration 是一个 NumericProperty,默认值为 .25(250毫秒)。

anim_func

用于动画的缓动函数。有关可用动画函数的更多信息,请参阅 kivy.animation.AnimationTransition

anim_func 是一个 ObjectProperty,默认值为 'out_expo'。您可以设置一个字符串或函数作为缓动函数使用。

min_space

每个项目标题使用的最小空间。每次布局事件发生时,此值会自动为每个子项设置。

min_space 是一个 NumericProperty,默认值为 44(像素)。

orientation

布局的方向。

orientation 是一个 OptionProperty,默认值为 'horizontal'。可取值 'vertical' 或 'horizontal'。

exception kivy.uix.accordion.AccordionException[源代码]

基类:Exception

AccordionException 类。

class kivy.uix.accordion.AccordionItem(**kwargs)[源代码]

基类:FloatLayout

必须与 Accordion 类结合使用的 AccordionItem 类。更多信息请参阅模块文档。

accordion

该项所属的 Accordion 实例。

accordion 是一个 ObjectProperty,默认值为 None。

add_widget(*args, **kwargs)[源代码]

将一个新部件添加为此部件的子部件。

参数:
widget: Widget

要添加到我们子控件列表中的控件。

index:整数,默认值为0

在列表中插入小部件的索引。请注意,默认值为0意味着小部件被插入到列表的开头,因此会绘制在其他同级小部件之上。关于索引和小部件层次结构的完整讨论,请参阅 小部件编程指南

在 1.0.5 版本加入.

canvas:字符串,默认为 None

用于添加控件画布的Canvas。可以是'before'、'after'或None(默认画布)。

在 1.9.0 版本加入.

>>> from kivy.uix.button import Button
>>> from kivy.uix.slider import Slider
>>> root = Widget()
>>> root.add_widget(Button())
>>> slider = Slider()
>>> root.add_widget(slider)
background_disabled_normal

折叠且禁用状态下,手风琴项默认图形表示所使用的背景图像。

在 1.8.0 版本加入.

background__disabled_normal 是一个 StringProperty,默认值为 'atlas://data/images/defaulttheme/button_disabled'。

background_disabled_selected

用于手风琴项目在选中(未折叠)且禁用状态下的默认图形表示背景图像。

在 1.8.0 版本加入.

background_disabled_selected 是一个 StringProperty,默认值为 'atlas://data/images/defaulttheme/button_disabled_pressed'。

background_normal

折叠状态下,手风琴项默认图形表示所使用的背景图像。

background_normal 是一个 StringProperty,默认值为 'atlas://data/images/defaulttheme/button'。

background_selected

用于手风琴项目在选中(未折叠)状态下默认图形表示时的背景图像。

background_normal 是一个 StringProperty,默认值为 'atlas://data/images/defaulttheme/button_pressed'。

collapse

布尔值,指示当前项目是否已折叠。

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

collapse_alpha

0到1之间的值,用于指示项目折叠程度(1)或是否被选中(0)。此值主要用于动画效果。

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

container

(内部)属性,将被设置为AccordionItem表示内部子项的容器。

container_title

(内部)属性,将被设置为AccordionItem表示中标题的容器。

content_size

(内部)由 Accordion 设置为分配给内容的大小。

min_space

链接到 Accordion.min_space 属性。

on_touch_down(touch)[源代码]

接收触摸按下事件。

参数:
touchMotionEvent

收到触摸事件。触摸坐标位于父级坐标系中。关于坐标系统的讨论,请参阅 relativelayout

返回:

bool 如果为 True,触摸事件的派发将停止。如果为 False,事件将继续派发给控件树中的其余部分。

orientation

链接到 Accordion.orientation 属性。

remove_widget(*args, **kwargs)[源代码]

从该部件的子部件中移除一个部件。

参数:
widget: Widget

要从我们的子部件列表中移除的部件。

>>> from kivy.uix.button import Button
>>> root = Widget()
>>> button = Button()
>>> root.add_widget(button)
>>> root.remove_widget(button)
title

条目的标题字符串。标题可能与`AccordionItemTitle`模板结合使用。如果你使用的是自定义模板,你可以将该属性用作文本输入,也可以不使用。默认情况下,它用于标题文本。参见title_template及以下示例。

title 是一个 StringProperty,默认值为 ''。

title_args

将传递给 kivy.lang.Builder.template() 方法的默认参数。

title_args 是一个 DictProperty,默认值为 {}。

title_template

用于创建手风琴项目标题部分的模板。默认模板是一个简单的Label,不可自定义(除了文本),支持垂直和水平方向,并为折叠和选中模式提供不同的背景。

如果默认模板不够用,最好创建并使用自己的模板。

title 是一个 StringProperty,默认值为 'AccordionItemTitle'。当前默认模板位于 kivy/data/style.kv 文件中。

以下是构建您自己的模板所需的代码:

[AccordionItemTitle@Label]:
    text: ctx.title
    canvas.before:
        Color:
            rgb: 1, 1, 1
        BorderImage:
            source:
                ctx.item.background_normal                         if ctx.item.collapse                         else ctx.item.background_selected
            pos: self.pos
            size: self.size
        PushMatrix
        Translate:
            xy: self.center_x, self.center_y
        Rotate:
            angle: 90 if ctx.item.orientation == 'horizontal' else 0
            axis: 0, 0, 1
        Translate:
            xy: -self.center_x, -self.center_y
    canvas.after:
        PopMatrix