GTK+ のプログレスバーを使ってみる
require './progress_bar' ProgressBar.set do |bar| for i in 0..10 bar.fraction(i / 10.0) sleep(0.3) end end
続けてもう一度プログレスバーを表示させると、何故だか「b.rb: Fatal IO error 0 (成功です) on X server :0.」というエラーが出る。大成功だと思っていたけれど、この不具合を直さないときちんと公表できないなあ。もう一度プログレスバーを表示させようとしなければ問題なさそうなのだが。
progress_bar.rb
require 'gtk2' class ProgressBar def initialize w = Gtk::Window.new w.set_size_request(300, 50) w.border_width = 10 w.title = "Progress" bar = Gtk::ProgressBar.new w.add(bar) reader, @writer = IO.pipe @f = fork do @writer.close Thread.new(bar, reader) do |bar, r| loop { bar.set_fraction(r.gets.to_f) } end w.signal_connect("destroy") {Gtk.main_quit} w.show_all Gtk.main end end def fraction(r) @writer.puts(r) end def delete sleep(1) Process.kill("KILL", @f) @writer.close Process.wait end def self.set bar = ProgressBar.new yield(bar) bar.delete end end
※参考
Ruby-GNOME2 Project Website - Ruby-GNOME2 Project Website
追記
結局こんな感じに落ち着きました。
GTK+ でプログレスバーを簡単に使う(Ruby) - Camera Obscura