Button Onpress Action

Date: February 26th 2016
Last updated: February 26th 2016

You can define functions inside a class that can be called from the kv file. The functions are defined using the stock standard python language. The only difference being that the class have inherited from Boxlayout.

main.py

import kivy
kivy.require('1.9.1')
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
import random

class Sample(BoxLayout):

    def create_random_number(self):
        """Returns a random number between 1 and 100"""
        rand_number = random.randrange(1,100,1)
        # Label only accepts string format: use str(object)
        self.random_number.text = str(rand_number)
        # You don't have to return a value for this to work

class SampleApp(App):
    def build(self):
        return Sample()

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

sample.kv

#:kivy 1.9.1
<Sample>:
    orientation: 'vertical'
    random_number: random_number #<==== global id

    BoxLayout:
        orientation: 'vertical'
        Label:  #<================== Label to change on click
            id: random_number #<======== id matching above
            text: 'Test label at V1 position'
            font_size: '40sp'  

        ToggleButton:
            text: 'Test ToggleButton at V2 position'

    BoxLayout:
        orientation: 'horizontal'
        size_hint: 1, 0.4
        Button:
            text: 'Play'
            # on_press uses the function created in main.py
            on_press: root.create_random_number() #<==== action
        Button:
            text: 'Reset'
        Button:
            text: 'Quit'

Output
Note the play button is in the clicked state and appears blue. Each time play is pressed the Label in the V1 position (top box) is updated to have a new random number.

onpress_action screenshot

results matching ""

    No results matching ""