ruby-****@lists*****
ruby-****@lists*****
2003年 6月 24日 (火) 00:23:35 JST
------------------------- REMOTE_ADDR = 61.26.70.211 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/?%A5%D7%A5%ED%A5%B0%A5%EC%A5%B9%A5%D0%A1%BC ------------------------- ------------------------- = プログレスバー プログレスバーは作業の状態を示すのに使われる. 下で示すサンプルコードを見れば分かるように,使い方は非常に簡単である. しかし,まずはプログレスバーの作成方法から見ていこう. Gtk::ProgressBar.new 作成したプログレスバーは下記のようにして使用する. Gtk::ProgressBar#set_fraction(fraction) Gtk::ProgressBar#fraction=(fraction) 引数fractionは作業がどの程度完了しているかという割合で, プログレスバーが0から100%のうちどの程度伸びたかを意味する. 引数fractionには0.0から1.0までFloatを渡す. プログレスバーは幾つかの異なった方法で値を表示したり,ユーザに現在の値とその範囲を知らせることができる. 次のメソッドを用いてプログレスバーが伸びる方向を設定することができる. Gtk::ProgressBar#set_orientation(orientation) 引数orientationは以下の定数のうちのいずれかで, プログレスバーがどの向きに動くのかを指定する. Gtk::ProgressBar::LEFT_TO_RIGHT Gtk::ProgressBar::RIGHT_TO_LEFT Gtk::ProgressBar::BOTTOM_TO_TOP Gtk::ProgressBar::TOP_TO_BOTTOM 進み具合がどれくらいかを表示するだけでなく,単に何かを実行中であることを示すためにプログレスバーを使用するともできる. これはアクティビティモードと呼ばれ,進捗状況をある範囲の数値として測定できないような場合に有用である. アクティビティモードでは,次のメソッドでプログレスバーを進めることができる. Gtk::ProgressBar#pulse pulseメソッドが呼ばれるたびに下記で設定する値(0.0から1.0の間)ずつプログレスバーが進む. Gtk::ProgressBar#pulse_step=(fraction) アクティビティモードでない場合,プログレスバーの溝の中にテキストを表示することもできる: Gtk::ProgressBar#text=(text) 現在設定されているテキストはGtk::ProgressBar#textで取得できる. テキストを消したい場合は,textにnilを指定する. プログレスバーは,マルチタスクのように見せるために通常タイムアウトやそれに関係したメソッド ( ((<タイムアウト、I/O およびアイドル関数>))を参照) と一緒に使用される. いずれにせよ,Gtk::ProgressBar#set_fractionやGtk::ProgressBar#pulseを同じように使用すればよい. {{image_right "progressbar.png"}} サンプル: {{br}} #! /usr/bin/env ruby require 'gtk2' Gtk::init window = Gtk::Window.new window.resizable = true window.title = "Gtk::ProgressBar" window.border_width = 0 vbox = Gtk::VBox.new(false, 5) vbox.border_width = 10 window.add(vbox) align = Gtk::Alignment.new(0.5, 0.5, 0, 0) vbox.pack_start(align, false, false, 5) pbar = Gtk::ProgressBar.new align.add(pbar) separator = Gtk::HSeparator.new vbox.pack_start(separator, false, false, 0) table = Gtk::Table.new(2, 3, false) table.row_spacings = 5 table.border_width = 5 vbox.pack_start(table, false, true, 0) check = Gtk::CheckButton.new("Show text") table.attach_defaults(check, 0, 1, 0, 1) check.signal_connect("clicked") {pbar.text = pbar.text ? nil : "some text"} check = Gtk::CheckButton.new("Activity mode") table.attach_defaults(check, 0, 1, 1, 2) check.signal_connect("clicked") do pbar.activity_mode = !pbar.activity_mode? if pbar.activity_mode? pbar.pulse else pbar.fraction = 0.0 end end check = Gtk::CheckButton.new("Right to Left") table.attach_defaults(check, 0, 1, 2, 3) check.signal_connect("clicked") do case pbar.orientation when Gtk::ProgressBar::LEFT_TO_RIGHT pbar.orientation = Gtk::ProgressBar::RIGHT_TO_LEFT when Gtk::ProgressBar::RIGHT_TO_LEFT pbar.orientation = Gtk::ProgressBar::LEFT_TO_RIGHT end end button = Gtk::Button.new("close") button.signal_connect("clicked") {window.destroy} vbox.pack_start(button, false, false, 0) button.can_default = true button.grab_default window.show_all thread = Thread.start do while true if pbar.activity_mode? pbar.pulse else new_val = pbar.fraction + 0.01 new_val = 0.0 if new_val > 1.0 pbar.fraction = new_val end sleep 0.1 end end window.signal_connect("destroy") do thread.kill Gtk::main_quit end Gtk::main thread.join