选项卡面板

_images/tabbed_panel.jpg

在 1.3.0 版本加入.

TabbedPanel 控件在标签页中管理不同的控件,其包含一个用于实际标签按钮的头部区域,以及一个用于显示当前标签页内容的内容区域。

TabbedPanel 提供了一个默认标签页。

简单示例

'''
TabbedPanel
============

Test of the widget TabbedPanel.
'''

from kivy.app import App
from kivy.uix.tabbedpanel import TabbedPanel
from kivy.lang import Builder

Builder.load_string("""

<Test>:
    size_hint: .5, .5
    pos_hint: {'center_x': .5, 'center_y': .5}
    do_default_tab: False

    TabbedPanelItem:
        text: 'first tab'
        Label:
            text: 'First tab content area'
    TabbedPanelItem:
        text: 'tab2'
        BoxLayout:
            Label:
                text: 'Second tab content area'
            Button:
                text: 'Button that does nothing'
    TabbedPanelItem:
        text: 'tab3'
        RstDocument:
            text:
                '\\n'.join(("Hello world", "-----------",
                "You are in the third tab."))

""")


class Test(TabbedPanel):
    pass


class TabbedPanelApp(App):
    def build(self):
        return Test()


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

备注

在1.5.0版本中,为了方便起见,引入了一个新类:class:TabbedPanelItem。因此,现在可以简单地将一个:class:`TabbedPanelItem`添加到:class:`TabbedPanel`中,并将`content`添加到:class:`TabbedPanelItem`中,如上述示例所示。

自定义选项卡面板

您可以指定标签页显示的位置:

tab_pos = 'top_mid'

单个标签页被称为TabbedPanelHeader。它是一个特殊的按钮,包含一个`content`属性。您需要先添加TabbedPanelHeader,然后单独设置其`content`属性:

tp = TabbedPanel()
th = TabbedPanelHeader(text='Tab2')
tp.add_widget(th)

单个标签页,由TabbedPanelHeader表示,需要设置其内容。该内容可以是任何控件。它可以是具有深层控件层级结构的布局,也可以是单个控件,如标签或按钮:

th.content = your_content_instance

在任何给定时间,所有标签页共享一个“主内容区域”处于激活状态。您的应用负责添加各个标签页的内容并管理它们,但不负责内容切换。标签面板会根据用户操作处理主内容对象的切换。

当TabbedPanel实例化时,会添加一个默认标签页。如上所述,您单独添加的标签页是在默认标签页之外额外添加的。因此,根据您的需求和设计,您可能需要自定义默认标签页:

tp.default_tab_text = 'Something Specific To Your Use'

默认标签页机制需要特别考虑和管理。因此,提供了一个 on_default_tab 事件,用于关联回调函数:

tp.bind(default_tab = my_default_tab_callback)

需要注意的是,默认情况下,default_tab_cls 的类型为 TabbedPanelHeader,因此它与其他标签页具有相同的属性。

自1.5.0版本起,通过将 do_default_tab 设置为 False,可以禁用 default_tab 的创建。

标签页和内容可以通过多种方式移除:

tp.remove_widget(widget/tabbed_panel_header)
or
tp.clear_widgets() # to clear all the widgets in the content area
or
tp.clear_tabs() # to remove the TabbedPanelHeaders

要访问选项卡面板的子组件,请使用content.children:

tp.content.children

要访问标签页列表,请使用以下代码:

tp.tab_list

要更改主选项卡面板内容的外观:

background_color = (1, 0, 0, .5) #50% translucent red
border = [0, 0, 0, 0]
background_image = 'path/to/background/image'

要更改单个标签页的背景,请使用以下两个属性:

tab_header_instance.background_normal = 'path/to/tab_head/img'
tab_header_instance.background_down = 'path/to/tab_head/img_pressed'

TabbedPanelStrip 包含各个选项卡的标题。要更改此选项卡条的外观,请覆盖 TabbedPanelStrip 的画布。例如,在 kv 语言中:

<TabbedPanelStrip>
    canvas:
        Color:
            rgba: (0, 1, 0, 1) # green
        Rectangle:
            size: self.size
            pos: self.pos

默认情况下,选项卡面板的条带会从选项卡面板的background_image和background_color中获取其背景图像和颜色。

class kivy.uix.tabbedpanel.StripLayout(**kwargs)[源代码]

基类:GridLayout

用于容纳整个TabbedPanel条的主布局,包括当标签未覆盖整个宽度/高度时的空白区域。

在 1.8.0 版本加入.

background_image

用于TabbedPanel的Strip布局的背景图像。

background_image 是一个 StringProperty,默认值为透明图像。

border

background_image 的边框属性。

border 是一个 ListProperty,默认值为 [4, 4, 4, 4]。

class kivy.uix.tabbedpanel.TabbedPanel(**kwargs)[源代码]

基类:GridLayout

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

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

背景颜色,格式为 (r, g, b, a)。

background_color 是一个 ColorProperty,默认值为 [1, 1, 1, 1]。

在 2.0.0 版本发生变更: ListProperty 更改为 ColorProperty

background_disabled_image

主共享内容对象在禁用时的背景图像。

在 1.8.0 版本加入.

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

background_image

主共享内容对象的背景图像。

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

bar_width

水平滚动条的宽度。对于水平条而言,该宽度被解释为高度。

在 2.2.0 版本加入.

bar_width 是一个 NumericProperty,默认值为 2。

border

用于 BorderImage 图形指令的边框,其本身用于 background_image。可更改为自定义背景。

它必须是一个包含四个值的列表:(bottom, right, top, left)。更多信息请参阅 BorderImage 指令。

border 是一个 ListProperty,默认值为 (16, 16, 16, 16)。

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

移除该部件的所有(或指定的):attr:~Widget.children。如果指定了'children'参数,它应为当前部件子项的一个列表(或过滤后的列表)。

在 1.8.0 版本发生变更: children 参数可用于指定你想要移除的子项。

在 2.1.0 版本发生变更: 指定一个空的``children``列表不会改变现有控件。此前,它会被视为``None``,从而移除所有子控件。

content

这是保存当前标签页内容的对象(当前标签页的内容会被添加到该对象中)。要监听当前标签页内容的变化,您应该绑定到当前标签页的 content 属性。

content 是一个 ObjectProperty,默认值为 'None'。

current_tab

当前选中或活动标签页的链接。

在 1.4.0 版本加入.

current_tab 是一个 AliasProperty,只读。

default_tab

保存默认标签页。

备注

为了方便起见,当您将 default_tab 更改为其他内容时,自动提供的默认标签页会被删除。自1.5.0版本起,此行为已扩展到所有 default_tab,以保持一致性,而不仅仅是自动提供的那个。

default_tab 是一个 AliasProperty

default_tab_cls

指定用于默认选项卡样式的类。

在 1.4.0 版本加入.

警告

default_tab_cls 应从 TabbedPanelHeader 继承子类。

default_tab_cls 是一个 ObjectProperty,默认值为 TabbedPanelHeader。如果你设置一个字符串,将使用 Factory 来解析该类。

在 1.8.0 版本发生变更: 如果设置了字符串,Factory 将解析该类。

default_tab_content

保存默认的标签页内容。

default_tab_content 是一个 AliasProperty

default_tab_text

指定默认标签页头部显示的文本。

default_tab_text 是一个 StringProperty,默认值为 'default tab'。

do_default_tab

指定是否提供默认的标签页头部。

在 1.5.0 版本加入.

do_default_tab 是一个 BooleanProperty,默认值为 'True'。

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

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

参数:
widget: Widget

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

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

设置滚动视图内容所使用的滚动类型。可用选项有:['content']、['bars']、['bars', 'content']。

在 2.2.0 版本加入.

scroll_type 是一个 OptionProperty,默认值为 ['content']。

strip_border

用于 strip_image 的边框。

在 1.8.0 版本加入.

strip_border 是一个 ListProperty,默认值为 [4, 4, 4, 4]。

strip_image

选项卡条的背景图像。

在 1.8.0 版本加入.

strip_image 是一个 StringProperty,默认值为空图像。

switch_to(header, do_scroll=False)[源代码]

切换到特定的面板标题。

在 1.10.0 版本发生变更.

如果与 do_scroll=True 一起使用,它也会滚动到页眉的标签页。

switch_to() 不能在 TabbedPanel 或其子类的 __init__ 方法中被调用。如果需要这样做,请使用 Clock 来调度它。完整的示例请参见 讨论

tab_height

指定标签页头部的高度。

tab_height 是一个 NumericProperty,默认值为 40。

tab_list

所有标签页头的列表。

tab_list 是一个 AliasProperty,且为只读属性。

tab_pos

指定标签页相对于内容的位置。可选值包括:left_topleft_midleft_bottomtop_lefttop_midtop_rightright_topright_midright_bottombottom_leftbottom_midbottom_right

tab_pos 是一个 OptionProperty,默认值为 'top_left'。

tab_width

指定标签页标题的宽度。

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

class kivy.uix.tabbedpanel.TabbedPanelContent(**kwargs)[源代码]

基类:FloatLayout

TabbedPanelContent 类。

exception kivy.uix.tabbedpanel.TabbedPanelException[源代码]

基类:Exception

TabbedPanelException 类。

class kivy.uix.tabbedpanel.TabbedPanelHeader(**kwargs)[源代码]

基类:ToggleButton

用于实现选项卡面板头部的基础。一个旨在作为TabbedPanel小部件的标题/选项卡使用的按钮。

您可以使用此TabbedPanelHeader小部件向TabbedPanel添加新标签页。

content

当此标签页头部被选中时,要加载的内容。

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

on_touch_down(touch)[源代码]

接收触摸按下事件。

参数:
touchMotionEvent

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

返回:

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

class kivy.uix.tabbedpanel.TabbedPanelItem(**kwargs)[源代码]

基类:TabbedPanelHeader

这是一个便捷类,它提供了一个TabbedPanelHeader类型的头部,并自动将其与内容关联起来。因此,方便您在kv语言中简单地执行以下操作:

<TabbedPanel>:
    # ...other settings
    TabbedPanelItem:
        BoxLayout:
            Label:
                text: 'Second tab content area'
            Button:
                text: 'Button that does nothing'

在 1.5.0 版本加入.

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)
remove_widget(*args, **kwargs)[源代码]

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

参数:
widget: Widget

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

>>> from kivy.uix.button import Button
>>> root = Widget()
>>> button = Button()
>>> root.add_widget(button)
>>> root.remove_widget(button)
class kivy.uix.tabbedpanel.TabbedPanelStrip(**kwargs)[源代码]

基类:GridLayout

用于作为标题/标签页背景的条状组件。此组件不覆盖标签页未占满TabbedPanel整个宽度/高度时的空白区域(如需覆盖,请使用:class:StripLayout)。

tabbed_panel

指向标签条所属面板的链接。

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