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, &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