エントリ,テキストや後述のリストボックス,キャンバスではスクロールバーが使用できます.
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クラスのインスタンスおよびメソッドを以下に示します.
インスタンス変数名 | 役割 |
---|---|
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クラスにはこのメソッドはありません. |
つまり,上記のプログラムによって,スクロールバーが変化すれば対応するウィジェットもそれに合わせて変化する,またその逆も変化するという相互作用が実現できたわけです.