Kivy:如何更改TabbedPanel的边框?

时间:2018-01-28 10:01:41

标签: python kivy border kivy-language tabbed

我现在挣扎了几个小时,只是为了能够在Kivy中自定义我的TabbedPanel的风格。这是我的代码:

function get_suggestion_array_from_object () {
    var test_searchstring = 'Ma';
    var test_current_object_string = '{"a":{"r":{"k":0,"y":0}, "s":{"s":0,"y":0}}}';
    var test_current_object = JSON.parse(test_current_object_string);
    var suggestion_array = [];
    for (var item in test_current_object) {
        var one = item;
        for( var item2 in test_current_object[item]) {
            var two =  item2;
            console.log( test_searchstring + one + two );
            }
        }
    }
}

get_suggestion_array_from_object ()

这是生成的窗口: resulting window

我实际上用绿色突出显示了我要删除的部分。我不想在图片中看到这个绿色部分,也就是说我希望我的标签位于我的内容旁边而没有这个奇怪的边框。

显然如果我不强迫画布变绿,我会看到这样的事情: I don't want this weird border

所以我看到我的TabbedPanelItem与我的内容之间存在差距,我不知道如何删除它。我试图将边框强制为 0 strip_border 强制为 0 ,更改高度我的小部件,强制 background_image "" 等,但我无法实现我想要的原因。

Kivy的专家可以帮助我吗?

提前谢谢

1 个答案:

答案 0 :(得分:2)

我怀疑它更棘手......

按钮存储在_tab_layout的{​​{1}}属性中。它是TabbedPanel子类,您可以更改其GridLayout属性。这是一个例子:

padding

请注意,要删除此边框,我必须将底部填充设置为from kivy.app import App from kivy.uix.floatlayout import FloatLayout from kivy.uix.gridlayout import GridLayout from kivy.lang import Builder Builder.load_string(''' <StripLayoust>: canvas: Color: rgba: (0, 1, 0, 1) # green Rectangle: size: self.size pos: self.pos <MainClass>: TabbedPanel: id: panel do_default_tab: False TabbedPanelItem: text: "1" Widget: canvas: Color: rgb: 0.1, 0.3, .02 Rectangle: size: self.size pos: self.pos TabbedPanelItem: text: "2" Widget: canvas: Color: rgb: 0.7, 0.6, .02 Rectangle: size: self.size pos: self.pos ''') class MainClass(FloatLayout): def __init__(self, *args): super(MainClass, self).__init__(*args) self.ids["panel"]._tab_layout.padding = '2dp', '2dp', '2dp', '-2dp' class TestApp(App): def build(self): return MainClass() if __name__ == '__main__': TestApp().run() 而不是-2dp。为什么?好吧,事实证明,每次面板更改时,update_tabs方法被调用,并且在其内部有this cute line

0dp

添加 tab_layout.height = (tab_height + tab_layout.padding[1] + tab_layout.padding[3] + dp(2)) 是硬编码的,所以我需要使用负值来对付它。

我在这里使用了下划线属性,它不是已建立的公共API的一部分,所以这种行为将来可能会改变。