Kivy Duplicating Widgets

Asked

Viewed 113 times

1

Hello,

I am trying to develop a goal program in Python and Kivy, but I have a problem, when I click on the "Add Category" button the "add_category" function is called and adds a label with the text that is in Textinput, but whenever I do this, the program automatically adds an empty label first than the one you requested.

I didn’t add the entire code with the rest of the screens, so the post wasn’t too long.

App screen:

inserir a descrição da imagem aqui

Kivy archive

<TelaCategorias>:

name: 'telacategorias'
BoxLayout:
    orientation: 'vertical'

    ActionBar:
        ActionView:
            ActionPrevious:
                title: "Tarefas"
                on_release: app.root.current = 'tarefas'

    ScrollView:

        BoxLayout:
            id: box_categorias
            orientation: 'vertical'
            size_hint_y: None
            height: self.minimum_height


    BoxLayout:
        size_hint_y: None
        height: 40
        orientation: 'vertical'

        TextInput:
            id: texto_categorias
            size_hint_y: None
            height: 35
            multiline: False

        Button:
            text: "Adicionar Categoria"
            size_hint_y: None
            height: 35
            on_release: root.add_categoria()

<Categorias>
size_hint_y: None
height: 40

Label:
    id: categoria_label
    font_size: 20

Button:
    text: "CAT"
    size_hint_x: None
    width: 80

Py file

    class TelaCategorias(Screen):
pass

def add_categoria(self):
    self.texto_cat = self.ids.texto_categorias.text  # Essa variável recebe o texto da variável no KV
    self.ids.box_categorias.add_widget(Categorias(self.texto_cat))  # Adiciona o Label chamando a classe
    # e passando o valor que está no TextInput
    self.ids.texto_categorias.text = ""  # Deixa o campo do texto em branco de novo

class Categorias(BoxLayout):  # A classse é chamada quando a função add_categoria é chamada
def __init__(self, text="", **kwargs):  # O __init__ recebe o texto que está na variável do Kivy
    super().__init__(**kwargs)  # Inicia os metódos dos BoxLayout
    self.ids.categoria_label.text = text

kv = Builder.load_file("test.kv")  # Carrega o arquivo KV.


telas = [TelaLogin(name="telalogin"), TelaCadastro(name="telacadastro"), Menu(name="menu"), Tarefas(name="tarefas"),
     TelaCategorias(name="telacategorias")]  # Lista com todas as telas

for tela in telas:
sm.add_widget(tela)  # Cria todas as telas adicionando-as com o Add_widget

sm.current = 'telalogin'  # A tela atual passa a ser a Tela de Login

class Test(App):  # Herda a classse "APP" e tem todas as funcionalidades dela
def build(self):  # O metódo build inicializa e constrói o aplicativo
    return sm

Test().run()  # Roda o APP
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.