Динамически добавлять и удалять виджеты кнопок в boxlayout - PullRequest
0 голосов
/ 30 января 2019

Нужна помощь в поиске кода, который позволит мне что-то искать в текстовом вводе, и все элементы, которые соответствуют поиску, будут отображены в поле.Я только начал kivy (3 дня назад)вокруг с киви.

YuGiOh.kv

#:kivy 1.10.1

<TestButton@Button>:
    width: 177
    height: 254
    size_hint: None, None
    background_normal: "pics/32864.jpg"

<FloatLayout>:

    id: searchpage
    display: entry

    Button:
        id: searchbutton
        size_hint: 0.20, 0.10
        pos_hint: {"x": 0.60, "top": 1}
        text: "search"

    Button:
        id: collectionbutton
        size_hint: 0.20, 0.10
        pos_hint: {"x": 0.80, "top": 1}
        text: "collection"

    TextInput:
        id: entry
        multiline: False
        font_size: 48
        size_hint: 0.60, 0.10
        pos_hint: {"x": 0, "top": 1}

    ScrollView:
        size_hint: 0.60, 0.90
        StackLayout:
            orientation: "lr-tb"
            pos_hint: {"x": 0, "top": 0.88}
            size_hint: 1, None

            height: self.minimum_height

            padding: 5
            spacing: 5

            TestButton:
            TestButton:
            TestButton:
            TestButton:
            TestButton:
            TestButton:
            TestButton:
            TestButton:
            TestButton:
            TestButton:
            TestButton:
            TestButton:

Мой код киви пока.

1 Ответ

0 голосов
/ 31 января 2019

Вы написали в комментарии Even an example of how to add and remove the widgets would help greatly as i can fit it to my own program and needs!, вот оно:

from kivy.app import App
from kivy.clock import Clock
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label


class MyWidget(BoxLayout):
    def __init__(self, *args):
        Clock.schedule_once(self.add_widgets, 1)
        Clock.schedule_once(self.remove_widgets, 2)

        return super().__init__(*args)

    def add_widgets(self, *args):
        # add two widgets
        self.add_widget(Label(text="Hello"))
        self.add_widget(Label(text="World"))

    def remove_widgets(self, *args):
        # remove a widget using children property
        self.remove_widget(self.children[1])


class MyApp(App):
    def build(self):
        return MyWidget()


if __name__ == '__main__':
    MyApp().run()

Это очень просто.Вы используете add_widget метод для добавления вновь созданного экземпляра любого виджета - кнопки, метки, макета и так далее.Затем вы можете удалить его, передав его идентификатор методу remove_widget.Вы можете получить его из children объекта или сохранить его самостоятельно, например:

my_button = Button(text="Blah blah")
# ...
my_layout.add_widget(my_button)
# ...
my_layout.remove_widget(my_button)
...