KVLang Series – 7
Dynamic Classes
Content:
– .kv file
– .py file
– screenshot of output
0007_dynamicClasses01.kv
Dynamic Classes, as opposed to Class Rules, allow you to inherit from a Base Class and allow you to change default values and to create bindings for all its instances, without adding any new Python code.
Dynamic Classes also replace the deprecated Templates concept.
See:
– Dynamic Classes
– Re-using styles in multiple widgets
– Designing with the Kivy Language
– Kivy Language
Here is the kvlang file.
0007_dynamicClasses01.kv
# see https://groups.google.com/d/topic/kivy-users/FdOhizCm7Ns/discussion # KV Lang http://kivy.org/docs/guide/lang.html# # Accessing Widgets defined in Python http://kivy.org/docs/guide/lang.html#accessing-widgets-defined-inside-kv-lang-in-your-python-code # Dynamic Classes - http://kivy.org/docs/api-kivy.lang.html # Referencing Widgets http://kivy.org/docs/guide/lang.html#referencing-widgets <LblTxtBtn@BoxLayout>: l_text: '0default' t_text: '1default' b_text: '2default' orientation: 'horizontal' Label: text: root.l_text TextInput: text: root.t_text Button: text: root.b_text <MyLayout@BoxLayout>: orientation: 'vertical' LblTxtBtn: l_text: 'DynClassInput1:' t_text: 'DynClassDefault Text1' b_text: 'DynClassPressMe 1' LblTxtBtn: l_text: 'DynClassInput2:' t_text: 'DynClassDefault Text2' b_text: 'DynClassPressMe 2' LblTxtBtn: l_text: 'DynClassInput3:' t_text: 'DynClassDefault Text3' b_text: 'DynClassPressMe 3' MyLayout
0007_dynamicClasses01.py
Because the .kv file uses Dynamic Classes as opposed to Class Rules, the Python File now reverts to its former simpler self.
I.E. In the Python file, it is NOT NECESSARY to define:
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty
class LblTxtBtn(BoxLayout):
l_text = StringProperty('')
t_text = StringProperty('')
b_text = StringProperty('')
class MyLayout(BoxLayout): pass
since it LblTxtBtn & MyLayout are Dynamic Classes in the .kv file.
Just revert to the SIMPLE 0005_nestedLayouts.py, update Window width to 430 & update the .kv filename.
- See: Alexander Taylor Re: kivy-users Re: Kivy Lnguage Template Question
- See: Accessing Widgets defined inside Kv lang in your python code.
''' 0007_dynamicClasses01.py **SIMPLE** Python to display Dynamic Classes Revert to 0005_nestedLayouts.py & update Window width & .kv filename. ''' import kivy kivy.require('1.8.0') from kivy.app import App from kivy.lang import Builder from kivy.core.window import Window Window.size = (430,90) class MyApp(App): def build(self): self.root = Builder.load_file('0007_dynamicClasses01.kv') return self.root if __name__ == '__main__': MyApp().run()
0007_dynamicClasses01 ScreenShot
Here is what this looks like run on Windows XP. In Pixels, it has: