0

我是Kivy第一次使用这个库,我正在尝试开发一个带有TabbedPanel. 我会将x每个选项卡(在代码中TabbedPanelItem)的大小()设置为适合整个TabbedPanel宽度,但如果我使用heightsize_hint.kv文件中,它们似乎不起作用。

这是我的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()

我已经阅读了关于在StripLayout内部使用的内容,TabbedPanel但我不知道这是否是一个好的解决方案以及如何正确应用它。有什么建议么?

4

1 回答 1

5

我已经对您的代码进行了一些试验,在阅读了 TabbedPanel 文档后,我发现它tab_width指定了选项卡标题的宽度(因为 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

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

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

我希望我是有帮助的。

于 2016-09-16T08:33:23.860 回答