[ruby-gnome2-doc-cvs] [Hiki] update - プログレスバー

Back to archive index

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
  




ruby-gnome2-cvs メーリングリストの案内
Back to archive index