Structurer son projet Kivy

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}