GTK+ でプログレスバーを簡単に使う(Ruby)

長い処理だと、プログレスバーがあると便利ですよね。GTK+ で簡単に表示できるライブラリを作ってみました。

 

使い方はこんな感じです。

Utils.progress_bar do |bar|
  for i in 0..20
    bar.fraction = i / 20.0
    bar.text = "#{i * 5}%"
    sleep(0.5)
  end
end

Utils.progress_bar のブロック内に処理を書きます。ブロック変数 bar のインスタンス・メソッド Gtk::ProgressBar#fraction= あるいは Gtk::ProgressBar#set_fraction()プログレスバーの値を決めるもので、0.0〜1.0 の値を代入して下さい。ウィンドウは自動で消えないので、ウィンドウに付いている消去のマークをクリックして処理が完了します。なお、ウィンドウを強制消去してしまった場合はユーザーの処理も中断してしまうので、注意して下さい。

なお、Gtk::PorgressBarインスタンス・メソッドはすべて使うことができます(text= なども)。


Ruby コード。

require 'gtk2'

module Utils
  def progress_bar
    w = Gtk::Window.new
    w.signal_connect("destroy") {Gtk.main_quit}
    w.set_size_request(300, 50)
    w.border_width = 10
    w.title = "Progress"
    
    bar = Gtk::ProgressBar.new
    w.add(bar)
  
    Thread.new(bar) do |bar|
      yield(bar)
    end
      
    w.show_all
    Gtk.main
  end
  module_function :progress_bar
end

なお、これは 野良 Gem 'Utils' - Camera Obscura に入れてあります。


※参考
gtk2-tut-progressbar - Ruby-GNOME2 Project Website