Les sources des exemples sont disponibles ici.
Travailler avec un fichier kv
Même si ce n’est pas obligatoire, il me semble plus simple de travailler avec un ou plusieurs fichiers kv. Ce ou ces fichiers vont vous permettre de définir la structure de votre interface :
- les composants,
- leurs positionnements,
- leurs tailles
- les événements associés
Accompagnant ce fichier kv, on aura un ou plusieurs fichiers Python.
Un solution pour des exemples basiques ( Exemple01 )
Dans cette solution, on privilégie la facilité. Par contre, on sera vite limité par un code vite brouillon.
– Le fichier builder.py
from kivymd.app import MDApp from kivy.lang import Builder from kivy.core.window import Window from kivymd.toast import toast class MonAppli(MDApp): title = "Mon appli" #icon = "Images/icon.png" def build(self): self.theme_cls.theme_style = "Light" self.theme_cls.primary_palette = "Teal" Window.size = (800,600) toast("C'est parti !") return Builder.load_file("design.kv") def bouton_cliquer(self) : self.root.ids.mon_label.text = "Tu as cliqué sur le bouton !" if __name__ == '__main__': MonAppli().run()
– Le fichier design.kv
Screen : MDRaisedButton : id : mon_bouton text : "Cliquer" pos_hint : {"center_x" : 0.5,"center_y" : 0.7} on_release : app.bouton_cliquer() MDLabel : id : mon_label text: "Mon texte de label" font_style : "H6" halign : "center" pos_hint : {"center_x" : 0.5,"center_y" : 0.4}
Une solution à conseiller ( Exemple02 )
La solution suivante demande un peu plus d’efforts mais elle a le mérite de mieux structurer son code autour des principaux composants graphiques.
Pour cela, on va associer une classe à un composant graphique majeur. Le code des événements pourra donc y être attaché plutôt que de rester dans la classe de l’application.
On pourra ainsi utiliser plusieurs classes de la sorte et plusieurs fichiers kv et Python.
Dans cette méthode, on devra faire un effort pour faire remonter les identifiants des composants graphiques inclus dans le composant majeur.
Dans cette exemple, le composant majeur choisi est de type « Screen » mais on peut le faire avec n’importe quel composant (« ScreenManager », « BoxLayout », …)
– Le fichier builder.py
from kivymd.app import MDApp from kivy.lang import Builder from kivy.properties import ObjectProperty from kivy.core.window import Window from kivymd.toast import toast from kivy.uix.screenmanager import Screen class MonAppliScreen(Screen) : mon_bouton = ObjectProperty() mon_label = ObjectProperty() def __init__(self, **kwargs): super().__init__(**kwargs) #Window.size = (800,600) toast("C'est parti !") def bouton_cliquer(self) : self.mon_label.text = "Tu as cliqué sur le bouton !" class MonAppli(MDApp): title = "Mon appli" #icon = "Images/icon.png" def build(self): self.theme_cls.theme_style = "Light" self.theme_cls.primary_palette = "Teal" return Builder.load_file("design.kv") if __name__ == '__main__': MonAppli().run()
– Le fichier design.kv
MonAppliScreen :
mon_bouton : mon_bouton
mon_label : mon_label
MDRaisedButton : id : mon_bouton text : "Cliquer" pos_hint : {"center_x" : 0.5,"center_y" : 0.7} on_release : root.bouton_cliquer() MDLabel : id : mon_label text: "Mon texte de label" halign : "center" font_style : "H6" pos_hint : {"center_x" : 0.5,"center_y" : 0.4}