メソッドの書式は,
bind(eventname, procedure[, keyword])
です.
proc{|x,y|procedure(x,y)}で,"%x,%y"で獲得できます.
使用例を示します.
#!/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 |