Skip to content Skip to sidebar Skip to footer

Update Label's Text When Pressing A Button In Kivy For Python

Here is my code: I want to make a game where the main_label changes text when you press a button but I've looked everywhere for a week and still don't understand how to do it. I lo

Solution 1:

Well! there was a real need for improvement in your code. (I understand it as you are not experienced.)

Improvement: 1

An application can be built if you return a widget on build(), or if you set self.root.(You shouldn't make all of the gui in build function itself.)

defbuild(self):
    return Hello() #That's what is done here

Improvement: 2

on_release/on_press both are always useful.

self.help_button = Button(text = "Help", size_hint=(.3, .1),pos_hint={'x':.65, 'y':.1},on_press = self.update)

Improvement: 3

As help_button is pressed, update function is called which changes the text of main_label.

defupdate(self,event):
    self.main_label.text = "Changed to change"

Here is you full improved code

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.floatlayout import FloatLayout
from kivy.clock import Clock

energy = 100
hours = 4classHello(FloatLayout):
    def__init__(self,**kwargs):
        super(Hello,self).__init__(**kwargs)

        self.energy_label = Label(text = "Energy = " + str(energy), size_hint=(.1, .15),pos_hint={'x':.05, 'y':.9})
        self.time_label = Label(text = "Hours = " + str(hours), size_hint=(.1, .15),pos_hint={'x':.9, 'y':.9})
        self.name_label = Label(text = "Game", size_hint=(.1, .15),pos_hint={'x':.45, 'y':.9})
        self.main_label = Label(text = "Default_text", size_hint=(1, .55),pos_hint={'x':0, 'y':.35})

    #Main Buttons
        self.inventory_button = Button(text = "Inventory", size_hint=(.3, .1),pos_hint={'x':.65, 'y':.2})
        self.help_button = Button(text = "Help", size_hint=(.3, .1),pos_hint={'x':.65, 'y':.1},on_press = self.update)
        self.craft_button = Button(text = "Craft", size_hint=(.3, .1),pos_hint={'x':.05, 'y':.1})
        self.food_button = Button(text = "Food", size_hint=(.3, .1),pos_hint={'x':.35, 'y':.2})
        self.go_button = Button(text = "Go", size_hint=(.3, .1),pos_hint={'x':.35, 'y':.1})
        self.walk_button = Button(text = "Walk", size_hint=(.3, .1),pos_hint={'x':.05, 'y':.2})

        self.add_widget(self.energy_label)
        self.add_widget(self.main_label)
        self.add_widget(self.time_label)
        self.add_widget(self.inventory_button)
        self.add_widget(self.help_button)
        self.add_widget(self.craft_button)
        self.add_widget(self.food_button)
        self.add_widget(self.go_button)
        self.add_widget(self.walk_button)
        self.add_widget(self.name_label)
        self.current_text = "Default"defupdate(self,event):
        self.main_label.text = "Changed to change"classapp1(App):
    defbuild(self):
        return Hello()
if __name__=="__main__":
     app1().run()

Solution 2:

Well another way you can go about it is that in Kivy everything at the right of the kivy language properties is pure python. So you can connect your kivy files to the python by passing some tag to your function and then act in python how ever you want.

In the .kv file:

Button: 
   on_press: root.label_change('btn1')

In the Python file:

Class MyButton(Button): 

    def label_change(self, event):
     self.event = eventif self.event == "btn1": 
           label.text = "something"

Solution 3:

Small dirty snippet!

import kivy
kivy.require('1.9.1')
from kivy.app import App
from kivy.lang import Builder
from kivy.clock import Clock
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
import random,string
Builder.load_string('''
<updlbl>:
    orientation: 'vertical'
    Label:
        id: updlbl
        text: 'Update Label'
    Button:
        text: 'Click me'
        on_press: root.upd('updated text')
 ''')

 classupdlbl(BoxLayout):
     def__init__(self, **kwargs):
       super(updlbl,self).__init__(**kwargs)
       passdefupd(self,txt):
       self.ids.updlbl.text = txt




 classUpdateLabel(App):
     defbuild(self):
     self.title = "Update Label"return updlbl()

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

Post a Comment for "Update Label's Text When Pressing A Button In Kivy For Python"