バインド(bindメソッド)

バインドとは, などの挙動(イベントといいます)があったときに,なにかの反応をさせたいときに使用するメソッドです.Ruby/Tkでは,全てのウィジェットクラスにbindメソッドが用意されています.

メソッドの書式は,

bind(eventname, procedure[, keyword])

です.

使用例を示します.

#!/usr/local/bin/ruby

require 'tk'

root = TkRoot.new

var = TkVariable.new('bindtest')
label = TkLabel.new(root, 'textvariable' => var).pack('fill'=>'both')
TkMessage.new(root,
	      'width' => 150,
	      'text' => 'このウィンドウの上にカーソルを当ててクリックやキーにタッチすると,いろいろなことが起こりそうです.').pack

TkButton.new(root,
	     'text' => 'quit',
	     'command' => proc{exit}).pack
root.bind('Button-1', proc{label.background('blue')})
root.bind('ButtonRelease-1', proc{label.background('gray85')})
root.bind('Button-2', proc{label.background('green')})
root.bind('ButtonRelease-2', proc{label.background('gray85')})
root.bind('Button-3', proc{label.background('red')})
root.bind('ButtonRelease-3', proc{label.background('gray85')})
root.bind('Double-1', proc{label.background('gold')})
root.bind('Double-2', proc{label.background('purple')})
root.bind('Double-3', proc{label.background('white')})
root.bind('Enter', proc{var.value = 'test!'})
root.bind('Leave', proc{var.value = 'test'})
root.bind('Key', proc{|k| var.value = "You pressed \"#{k}\"."}, "%K")
Tk.mainloop
上記のプログラムを走らせると,以下のウィンドウが生成されます.どうなるかは,実際にやってみるたほうがお分かりいただけると思います.

イベントとキーワードの一覧を以下に示します.イベント名は

"(イベント)-(修飾イベント名)"
で記述します.一方を省略することも可です.

イベント(抄)
イベント イベント内容
Button マウスボタンが押された
ButtonPress マウスボタンが押された
ButtonRelease マウスボタンが押した状態から離された
Double マウスのダブルクリック
Key キーボードのキーが押された
KeyPress キーボードのキーが押された
KeyRelease キーボードのキーが離された
Enter マウスポインタがウィジェットの中に入った
Leave マウスポインタがウィジェットの中から出た
Motion マウスポインタがウィジェットの中で動いた
Map ウィジェットが配置された
Configure ウィジェットの属性(位置,サイズなど)が変更された
Destroy ウィジェットが強制終了した.
修飾イベント名(抄)
修飾イベント名 意味
Alt Altキー
Button1
B1
マウスボタン1
(以下Button2〜Button5まである.)
Control Ctrlキー
Lock Caps Lockキー
Meta
M
Metaキー
Mod1
M1
Modifier1
(以下Mod2〜Mod5まである.)
Return Returnキー
Shift Shiftキー
イベントのキーワード(抄)
イベントキーワード 意味
%b ButtonPress,ButtonReleaseが発生したときのボタン番号
%h Configureが発生したときの高さ情報
%k Keyが発生したときのKey Code
%w Configureが発生したときの幅情報
%x マウスポインタのx座標
%y マウスポインタのy座標
%A Keyが発生したときのAscii Code
%K Keyが発生したときのKeysym Name
%N Keyが発生したときのKeysym Number
%T イベントタイプ
%W イベント時のwidget


戻る