GtkWidgetProgressBar

Source : http://rubygarden.org/ruby?GtkWidgetProgressBar
Auteur :
Traduction : Frédéric Logier
Modifications : RubyFR
Licence :

Exemple d’une barre de progression

Que fait-il ?

  • Initialise et ouvre un Gtk::Window (à la fin du code)
  • Met la barre de progression dans une fenêtre
  • Créé un nouveau thread pour le vrai travail
  • Créé un objet procédure pour mettre à jour le callback
  • Créé un callback GTK+ pour mettre à jour la barre de progression
  • Fait quelques “trucs”

Attention

  • Les actuelles taches devraient être dans un nouveau thread
  • Pour mettre à jour la barre de progression régulièrement, utilisez Gtk::timeout_add
N’oubliez pas d’intercepter les exceptions et de finir proprement !

 require 'gtk2' # ProgressBar sample (c) Gergely Kontra
 class ProgressBarExample < Gtk::Window
   def initialize
     super()
     self.add(@pb=Gtk::ProgressBar.new)
     self.signal_connect('destroy') { quit } # handle exit
     do_task
     show_all
   end
   def do_task
     fraction=0.0;text='nothing yet'
     update_proc=Proc.new { @pb.fraction=fraction; @pb.text=text; true }
     @task_thread=Thread.new { #our long process runs in a separate thread
       begin
     timer=Gtk::timeout_add(100, &amp;update_proc) # Begin to update the ProgressBar
     # Do something interesting...
     0.step(1,0.01) {|fraction|
       text=Time.now.to_s
       sleep 0.1
     }
     text="Completed"; fraction=1.0 # indicate, that we are ready
       rescue RuntimeError => reason
     text=reason # Thread is aborted for some reason
       ensure
     update_proc.call # be sure, that the progressbar is updated
     Gtk::timeout_remove(timer) # and remove the callback
       end
     }
   end
   def quit; Gtk.main_quit; true; end
 end
 Thread.abort_on_exception=true # I found it very useful for debugging
 Gtk.init
 pb=ProgressBarExample.new
 Gtk.main