スクロールバー(Scrollbar)

スクロールバーとは,画面には入り切らないほど大きな(または意図的に表示範囲を狭くしたい)ウィジェットを生成したいとき,あらかじめ一部だけを可視範囲にして,それをスクロールさせて全体を眺めさせるときに使用するウィジェットです.

エントリ,テキストや後述のリストボックス,キャンバスではスクロールバーが使用できます.

Ruby/TkではTkScrollbarクラスが相当します.

使用例を示します.

#!/usr/local/bin/ruby

require 'tk'

string = 'たとえば,文字列がたくさんあって,
このように1行にはいりきらなければ,
スクロールバーを使用すると効果的です.




改行をたくさんして,
縦方向がいっぱいになっても
自動的に拡張されるので
安心ですね.
以上がスクロールバーの
実例でした.'

frame = TkFrame.new(nil)
xscrollbar = TkScrollbar.new(nil,
			 'orient' => 'horizontal')
yscrollbar = TkScrollbar.new(frame,
			 'orient' => 'vertical')
text = TkText.new(frame,
		  'wrap' => 'none',
		  'width' => 20,
                  'height' => 10,
		  'xscrollcommand' => proc{|idx| xscrollbar.set(*idx)},
		  'yscrollcommand' => proc{|idx| yscrollbar.set(*idx)})

xscrollbar.command(proc{|idx| text.xview(*idx)})
yscrollbar.command(proc{|idx| text.yview(*idx)})

yscrollbar.pack('side' => 'right', 'fill' => 'both')
xscrollbar.pack('side' => 'bottom', 'fill' => 'both')
text.pack('side' => 'left', 'fill' => 'both', 'expand' => 'yes')
frame.pack('side' => 'top', 'fill' => 'both', 'expand' => 'yes')
text.insert('end',string)
Tk.mainloop
上記のプログラムを走らせると,下のようになります.

TkScrollbarクラスのインスタンスおよびメソッドを以下に示します.

TkScrollbarクラスのインスタンス変数とメソッド(抄)
インスタンス変数名 役割
activebackground マウスが乗っているときの背景色.
background 背景色.
borderwidth 枠の幅.整数値で指定.
cursor マウスカーソルの形.
relief ウィジェットの凹凸.'raised'または'sunken'で指定.
width ウィジェットの幅.
command スクロールバーが変動したとき,スクロールバーの動きにしたがってスクロールするウィジェットのコマンドを指定します.
activerelief 各パーツにマウスが乗ったときの凹凸.'raised'または'sunken'で指定します.
メソッド名 機能
set(index) スクロールバーのスクロール位置を指定します.

実は,TkEntry,TkText,TkListboxおよびTkCanvasには以下のメソッドがあります.

メソッド名 役割
xview(index) ウィジェットx軸方向の可視範囲を指定します.2つ以上の特定の文字列引数indexで指定します.
yview(index) ウィジェットy軸方向の可視範囲を指定します.2つ以上の特定の文字列引数indexで指定します.
TkEntryクラスにはこのメソッドはありません.

つまり,上記のプログラムによって,スクロールバーが変化すれば対応するウィジェットもそれに合わせて変化する,またその逆も変化するという相互作用が実現できたわけです.


戻る