Les sources des exemples sont disponibles ici.
Le principe
Kivy ne travaille qu’avec une seule fenêtre. Dans celle-ci, on peut mettre un ou plusieurs composants “Screen”.
On peut ainsi en mettre plusieurs les uns après les uns pour remplir la fenêtre, à la manière des “Layout”.
Mais on peut surtout les mettre les uns à la place des autres. Pour celà, on utilise un ou plusieurs composants “ScreenManager”.
Ainsi, le contenu d’un “ScreenManager” est une succession de “Screen” dont les noms devront être définie par l’attribut “name” (à ne pas confondre avec “id”).
L’attribut “current” du “ScreenManager” indique le nom du composant “Screen” courant. Il suffit donc de changer sa valeur pour basculer d’un écran à l’autre.
Un exemple basique : on basculer entre deux écrans ( Exemple04 )
– Builder.py
On y définit deux classes “Screen1” et “Screen2”, et la méthode “vers-ecran()” pour faire la bascule.
from kivymd.app import MDApp from kivy.lang import Builder from kivy.uix.screenmanager import Screen class Screen1(Screen) : pass class Screen2(Screen) : pass 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") def vers_ecran(self,ecran): self.root.ids.screen_manager.current = ecran if ecran=="ecran1": self.root.ids.screen_manager.transition.direction = "right" else : self.root.ids.screen_manager.transition.direction = "left" if __name__ == '__main__': MonAppli().run()
– design.kv
On commence par définir les deux écrans, avant les placer dans le ScreenManager.
Ne pas oublier de placer le ScreenManager dans un Screen.
<Screen1> : name : "ecran1" MDBoxLayout : orientation : "vertical" padding : 20 spacing : 20 MDLabel : text: "Écran 1" halign : "center" font_style : "H6" md_bg_color : (1,1,0,0.5) size_hint_y : 0.5 MDFloatLayout : MDRaisedButton : text : "Aller sur Écran 2" pos_hint : {"center_x" : 0.5,"center_y" : 0.5} on_release : app.vers_ecran("ecran2") <Screen2> : name : "ecran2" MDBoxLayout : orientation : "vertical" padding : 20 spacing : 20 MDLabel : text: "Écran 2" halign : "center" font_style : "H6" md_bg_color : (0,1,1,0.5) size_hint_y : 0.5 MDFloatLayout : MDRaisedButton : text : "Aller sur Écran 1" pos_hint : {"center_x" : 0.5,"center_y" : 0.5} on_release : app.vers_ecran("ecran1") Screen : ScreenManager: id: screen_manager Screen1 : Screen2 :
Un exemple plus complet : utilisation de MDNavigationLayout et de MDNavigationDrawer
Cet exemple peut servir de base pour un vrai projet.
Les deux fichiers principaux sont encore builder.py et design.kv.