はじめまして。
Ruby/GtkでのProgressBarについて質問があります。
下のソースを実行した場合、プログレスバーの途中が表示されません。18行目の
updateをThread.start { update }に変更すれば途中も表示されるようになるので
すが、それだとプログレスバーを表示しながら実行する部分はすべてスレッドに
しなければならず、いまいち使い勝手が良くありません。
おそらく、スレッドにしなかった場合、updateの処理の途中でGtkに制御が移らな
いため、内部の数値だけ変更されて表示が更新されないのだと思いますが、どう
対処して良いかわかりません。どうすれば良いでしょうか?
---ソース---
require "gtk"
def update
(0..10).each { |i|
r=Float(i)/10
p r
$progress.update(r)
sleep(1)
}
end
top=Gtk::Window.new(Gtk::WINDOW_TOPLEVEL)
top.signal_connect("destroy") { exit }
vbox=Gtk::VBox.new(true,0)
$progress=Gtk::ProgressBar.new
button=Gtk::Button.new("Start")
button.signal_connect("clicked") { |*args|
update
}
vbox.pack_start($progress,true,true,0)
vbox.pack_start(button,true,true,0)
top.add(vbox)
top.show_all
Gtk.main
--
「臆病者には勝利の女神は微笑まない」
YASUI Kentarow <kenyasui / alles.or.jp> http://www.alles.or.jp/~kenyasui/