Python (Kivy) - 如何调整 TabbedPanel 标签的大小

Python (Kivy) - How to resize tabs of a TabbedPanel

我是第一次使用 Kivy 库,我正在尝试开发一个带有 TabbedPanel 的简单 UI。我会设置每个选项卡的大小 (x)(在代码 TabbedPanelItem 中)以适应整个 TabbedPanel 的宽度,但是如果我使用 height 或 [= .kv 文件中的 19=] 似乎不起作用。

这是我的 kv 代码:

#:import sm kivy.uix.screenmanager
ScreenManagement:
    transition: sm.FadeTransition()
    SecondScreen:


<SecondScreen>:
    tabba: tabba
    name: 'second'
    FloatLayout:
        background_color: (255, 255, 255, 1.0)
        BoxLayout:
            orientation: 'vertical'
            size_hint: 1, 0.10
            pos_hint: {'top': 1.0}
            canvas:
                Color:
                    rgba: (0.98, 0.4, 0, 1.0)
                Rectangle:
                    pos: self.pos
                    size: self.size
            Label:
                text: 'MyApp'
                font_size: 30
                size: self.texture_size

        BoxLayout:
            orientation: 'vertical'
            size_hint: 1, 0.90
            Tabba:
                id: tabba

        BoxLayout:
            orientation: 'vertical'
            size_hint: 1, 0.10
            pos_hint: {'bottom': 1.0}
            Button:
                background_color: (80, 1, 0, 1.0)
                text: 'Do nop'
                font_size: 25


<Tabba>:
    do_default_tab: False
    background_color: (255, 255, 255, 1.0)
    # I would these three tabs' width filling the entire TabbedPanel's width
    TabbedPanelItem:
        text: 'First_Tab'
        Tabs:

    TabbedPanelItem:
        text: 'Second_Tab'
        Tabs:

    TabbedPanelItem:
        text: 'Third_Tab'
        Tabs:


<Tabs>:
    grid: grid
    ScrollView:
        do_scroll_y: True
        do_scroll_x: False
        size_hint: (1, None)
        height: root.height
        GridLayout:
            id: grid
            cols: 1
            spacing: 10
            padding: 10
            size_hint_y: None
            height: 2500

这是我的 Python 代码:

# coding=utf-8
__author__ = 'drakenden'

__version__ = '0.1'

import kivy
kivy.require('1.9.0') # replace with your current kivy version !

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.properties import StringProperty, ObjectProperty,NumericProperty
from kivy.uix.tabbedpanel import TabbedPanel
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.utils import platform
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView

class Tabs(ScrollView):
    def __init__(self, **kwargs):
        super(Tabs, self).__init__(**kwargs)


class Tabba(TabbedPanel):
    pass


class SecondScreen(Screen):
    pass

class ScreenManagement(ScreenManager):
    pass

presentation = Builder.load_file("layout2.kv")

class MyApp(App):

    def build(self):
        return presentation


MyApp().run()

我读过有关在 TabbedPanel 中使用 StripLayout 的信息,但我不知道这是否是一个好的解决方案以及如何正确应用它。有什么建议么?

我对您的代码进行了一些试验,在阅读了 TabbedPanel 文档后,我发现 tab_width 指定选项卡的宽度 header(因为 tab_height 用于高度).要在你的 kivy 文件中使用它,你必须添加以下行:

<Tabba>:
    do_default_tab: False
    tab_width: self.parent.width / 3
    background_color: (255, 0, 255, 1.0)
    # I would these three tabs' width filling the entire TabbedPanel's width
    TabbedPanelItem:
    .
    .
    .
    the rest of your kivy file

我们在这一行中添加的是每个选项卡将是其 parent 宽度的 1/3。

这甚至适用于少于或多于 3 个标签。如果您添加更多标签,将添加一个水平滚动条以滚动浏览额外的标签。

希望对您有所帮助。