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:
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