This recipe will teach you how to access definitions inside the Kv language in your Python code and vice versa.
This recipe will use button, a very common widget that we also used in the last recipe.
This recipe follows as:
Make a rule for the widget.
Define a button.
Give it an ID.
Define the label for the button.
In the action, call a method in the Python code:
<MyW>: Button: id: b1 text: 'Press to smash' on_release: root.b_smash()
Create the Python code with the method:
import kivy kivy.require('1.8.0') # replace with your current kivy version ! from kivy.app import App from kivy.uix.widget import Widget class MyW(Widget): def b_smash(self): self.ids.b1.text = 'Pudding' class e7App(App): def build(self): return MyW() if __name__ == '__main__': e7App().run()
In the Kv Language file, we have the following in the first line:
<MyW>:
This is the name of the widget, a simple button. The second line is:
Button:
This is the button definition. The third line is:
id: b1
This gives the button an ID b1
. The fourth line is:
text: 'Press to smash'
This makes the initial text on the button 'Press to smash'
. The fifth line is:
on_release: root.b_smash()
The preceding line is making a call to the Python code; it refers the method b_smash()
of the root class MyW
.
The fifth line in the Python code is:
class MyW(Widget):
This is the definition of the class related to the Widget
. The sixth line is:
def b_smash(self):
This defines the method b_smash()
, which is accessed by the Kv language file. The seventh line is:
self.ids.b1.text = 'Pudding'
This accesses the widget defined in the Kv language file, specifically the button with its ID, and changes the text displayed in the button to the text Pudding
.
If you want to run your interface, take a look at our recipe Running your code, and to get more details about widgets, see the recipes in Chapter 4, Widgets.