动态添加小部件时,BoxLayout不会调整大小

时间:2019-05-14 16:34:51

标签: python python-3.x kivy

我有一个我自己无法解决的问题:

我在Python文件中拥有的内容:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout


class Dossier(BoxLayout):
    def __init__(self, nom_, **kwargs):
        super(Dossier, self).__init__(**kwargs)

        self.orientation = 'vertical'
        self.spacing = 2
        self.size_hint_y = None
        self.height = self.minimum_height
        self.nom = nom_

        self.ids.TB.text = nom_

    def clic(self):
        temp = Dossier(str(self.nom) + "\\sous-dossier")
        self.ids.SD.add_widget(temp)


class testApp(BoxLayout):
    def __init__(self, nom_, **kwargs):
        super(testApp, self).__init__(**kwargs)

        self.orientation = 'vertical'
        self.spacing = 2
        self.size_hint_y = None
        self.height = self.minimum_height
        self.nom = nom_

        self.add_widget(Dossier(nom_))


class TestApp(App):

    def build(self):
        return testApp('test')


if __name__ == "__main__":
    TestApp().run()

我在kv文件中有什么

<Dossier>:

    ToggleButton:

        id: TB
        size_hint_y : None
        height: 25
        halign : 'left'
        valign : 'center'
        on_press: root.clic()

    BoxLayout:

        id: SD
        orientation : 'vertical'
        spacing : 2
        size_hint_y : None
        height: self.minimum_height

当我选择ToggleButton“ TB”时,这就是我得到的:

之前:

Before

之后:

after

我添加的对象“ Dossier”仅包含一个ToggleButton,其高度为25,一个空的BoxLayout(在创建时)。间距为2时,“ Dossier”(由BoxLayout继承)实例的高度为27。

但是,当我将其添加到“根”“文档”的空BoxLayout中时,BoxLayout不会更改其大小,并且子对象会在父对象上绘制。

很抱歉,如果我不清楚,我不是说英语的人。

1 个答案:

答案 0 :(得分:0)

添加小部件-缺少大小

添加小部件时,请指定小部件的大小,例如size_hint_y=None, height=40

示例

main.py

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.lang import Builder
from kivy.clock import Clock


Builder.load_string("""
<Dossier>:

    ToggleButton:

        id: TB
        text: 'Dossier'
        size_hint_y : None
        size : (1,25)
        halign : 'left'
        valign : 'center'

    BoxLayout:

        id: SD
        orientation : 'vertical'
        spacing : 2
        size_hint_y : None
        height: self.minimum_height
""")


class Dossier(BoxLayout):
    def __init__(self, nom_, **kwargs):
        super(Dossier, self).__init__(**kwargs)

        self.orientation = 'vertical'
        self.spacing = 2
        self.size_hint_y = None
        self.size = (485, 0)
        self.nom = nom_

        self.ids.TB.text = nom_
        Clock.schedule_once(lambda dt: self.simulation_add_widgets(), 5)

    def simulation_add_widgets(self):
        for i in range(10):
            self.ids.SD.add_widget(Button(text="btn "+str(i), size_hint_y=None, height=40))


class TestApp(App):

    def build(self):
        return Dossier('1')


if __name__ == "__main__":
    TestApp().run()

输出

Result