Отображать виджет, когда пользователь хочет в киве - PullRequest
0 голосов
/ 24 апреля 2018

это простая программа, но я не могу найти способ заставить ее работать.я просто хочу добавить виджет в boxlayout2, когда пользователь нажимает кнопку (и ничего не написал в textinput), который находится в boxlayout1. Виджет не отображается на экране. Что мне делать?

main.py

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



class BoxLayout1(BoxLayout):
    def Search(self):
        if self.ids.textinput.text!='':
            BoxLayout2()


class BoxLayout2(BoxLayout):
    def Print(self):
        self.add_widget(Button(text='hello'))




class TestApp(App):
    pass


TestApp().run()

и вот мой код kivy

test.kv

<BoxLayout1>:
    BoxLayout:
        Label:
            text:'Hello'
        TextInput:
            id: textinput
        Button:
            text: 'write'
            on_press: root.Search()


BoxLayout:
    orientation: 'vertical'
    BoxLayout1:
    BoxLayout2:

Я вижумакет презентации хочу, но кнопки нигде не найти.

1 Ответ

0 голосов
/ 24 апреля 2018

Чтобы было понятно, давайте проследим за потоком написанного вами приложения.

  1. он создает BoxLayout и помещает в него BoxLayout1 и BoxLayout2, второй не имеет никакого содержимого. Когда вы нажимаете на кнопку «запись», приложение проверяет содержимое текстового поля и, если оно действительно, вызывает конструктор BoxLayout2! Теперь на этом этапе он создает экземпляр этого класса, но не сохраняет его ссылку, поэтому он будет немедленно отброшен. Теперь вам нужно вызвать функцию существующего в данный момент экземпляра, а не создавать другую. Вот код:

питон:

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


class BoxLayout1(BoxLayout):
    def Search(self):
        if self.ids.textinput.text!='':
            self.parent.ids.bxl2.addButton()
#            BoxLayout2()


class BoxLayout2(BoxLayout):
    def addButton(self):
        button=Button(text='hello')
        self.add_widget(button)

кивый язык:

<BoxLayout1>:
    BoxLayout:
        Label:
            text:'Hello'
        TextInput:
            id: textinput
        Button:
            text: 'write'
            on_press: root.Search()


BoxLayout:
    orientation: 'vertical'
    BoxLayout1:
    BoxLayout2:
        id:bxl2
...