Les sources des exemples sont disponibles ici.
Le principe
Lorsque l’application possède une action longue, il est important d’utiliser une barre de progression pour en avertir l’utilisateur.
Il faut donc isoler cette action longue dans un thread pour pouvoir laisser la barre se mettre à jour grâce au module Clock qui permet de lancer une tâche à intervalles réguliers.
Un exemple : la barre boucle jusqu’à la fin du thread (Exemple06)
Comme cet exemple permet de savoir la durée du thread, on peut donc facilement le transformer pour que la barre afficher le pourcentage de la tâche en cours
– 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 from kivy.clock import Clock from kivymd.toast import toast import time import threading class MonAppliScreen(Screen) : mon_bouton = ObjectProperty() mon_progressbar = ObjectProperty() def __init__(self, **kwargs): super().__init__(**kwargs) #Window.size = (800,600) def bouton_cliquer(self) : self.mon_progressbar.opacity = 1 self.event_clock = Clock.schedule_interval(self.progres_bar_update, 0.5) self.event_thread = threading.Event() self.mon_thread = threading.Thread(target=self.action_thread) self.mon_thread.start() def progres_bar_update(self,dt): if self.mon_progressbar.value == 100: self.mon_progressbar.value = 0 self.mon_progressbar.value = self.mon_progressbar.value +25 def action_thread(self) : # ce qu'on veut qui dure for k in range (5) : time.sleep(1) self.end_thread() def end_thread(self) : self.event_thread.clear() self.event_clock.cancel() self.mon_progressbar.value = 0 self.mon_progressbar.width = 0 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()
– design.kv
MonAppliScreen : mon_bouton : mon_bouton mon_progressbar : mon_progressbar MDRaisedButton : id : mon_bouton text : "Cliquer" pos_hint : {"center_x" : 0.5,"center_y" : 0.7} on_release : root.bouton_cliquer() MDProgressBar : id : mon_progressbar value : 0 pos_hint : {"center_x" : 0.5} opacity : 0