BoxLayout не изменяет размер при добавлении виджета динамически - PullRequest
0 голосов
/ 14 мая 2019

У меня есть проблема, которую я не могу решить самостоятельно:

Что у меня есть в файле 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

Объект «Досье», который я добавляю, содержит только ToggleButton с высотой 25 и пустой (на момент создания) BoxLayout. С интервалом 2 высота экземпляра «Досье» (который наследуется от BoxLayout) равна 27.

Но когда я добавляю его в пустой BoxLayout моего «корневого» «Досье», BoxLayout не меняет свой размер, и дочерний объект рисуется поверх родительского.

Извините, если мне не ясно, я не являюсь носителем английского языка.

1 Ответ

0 голосов
/ 14 мая 2019

Добавление виджета - отсутствует размер

При добавлении виджета укажите размер виджета, например, 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...