1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
#!/usr/bin/env ruby
require 'tk'
TkLabel.new(:text=><<EOT, :justify=>:left).pack
This is a sample of bindtags and usage of
Tk.callback_break/Tk.callback_continue.
Please check the work of following buttons
(attend the difference between before/after
pressing the bottom button), and see the
source code.
EOT
def set_class_bind
TkButton.bind('ButtonPress-1',
proc{puts 'bind "ButtonPress-1" of TkButton class'})
TkButton.bind('ButtonRelease-1',
proc{puts 'bind "ButtonRelease-1" of TkButton class'})
end
# set root binding
r = TkRoot.new
r.bind('ButtonPress-1', proc{puts 'bind "ButtonPress-1" of root widget'})
r.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of root widget'})
# set 'all' binding
TkBindTag::ALL.bind('ButtonPress-1',
proc{puts 'bind "ButtonPress-1" of the tag "all"'})
TkBindTag::ALL.bind('ButtonRelease-1',
proc{puts 'bind "ButtonRelease-1" of the tag "all"'})
# create buttons
b1 = TkButton.new(:text=>'button-1',
:command=>proc{puts "command of button-1"}).pack
b2 = TkButton.new(:text=>'button-2',
:command=>proc{puts "command of button-2"}).pack
b3 = TkButton.new(:text=>'button-3',
:command=>proc{puts "command of button-3"}).pack
b4 = TkButton.new(:text=>'button-4',
:command=>proc{puts "command of button-4"}).pack
b5 = TkButton.new(:text=>'button-5',
:command=>proc{puts "command of button-5"}).pack
# set button binding
b1.bind('ButtonPress-1', proc{puts 'bind "ButtonPress-1" of button-1'})
b1.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-1'})
b2.bind('ButtonPress-1', proc{puts 'bind "ButtonPress-1" of button-2'})
b2.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-2'})
b3.bind('ButtonPress-1', proc{puts 'bind "ButtonPress-1" of button-3'})
b3.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-3'})
b4.bind('ButtonPress-1', proc{puts 'bind "ButtonPress-1" of button-4'})
b4.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-4'})
b5.bind('ButtonPress-1', proc{puts 'bind "ButtonPress-1" of button-5'})
b5.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-5'})
# create bindtag and set binding
tag1 = TkBindTag.new
tag1.bind('ButtonPress-1', proc{puts 'bind "ButtonPress-1" of tag1'})
tag1.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of tag1'})
tag2 = TkBindTag.new
tag2.bind('ButtonPress-1',
proc{
puts 'bind "ButtonPress-1" of tag2'
puts 'call Tk.callback_continue'
Tk.callback_continue
puts 'never see this message'
})
tag2.bind('ButtonRelease-1',
proc{
puts 'bind "ButtonRelease-1" of tag2'
puts 'call Tk.callback_continue'
Tk.callback_continue
puts 'never see this message'
})
tag3 = TkBindTag.new
tag3.bind('ButtonPress-1',
proc{
puts 'bind "ButtonPress-1" of tag3'
puts 'call Tk.callback_break'
Tk.callback_break
puts 'never see this message'
})
tag3.bind('ButtonRelease-1',
proc{
puts 'bind "ButtonRelease-1" of tag3'
puts 'call Tk.callback_break'
Tk.callback_break
puts 'never see this message'
})
# set bindtags
p b1.bindtags
tags = b2.bindtags
tags[2,0] = tag1
tags[0,0] = tag1
b2.bindtags(tags)
p b2.bindtags
tags = b3.bindtags
tags[2,0] = tag2
tags[0,0] = tag2
b3.bindtags(tags)
p b3.bindtags
tags = b4.bindtags
tags[2,0] = tag3
tags[0,0] = tag3
b4.bindtags(tags)
p b4.bindtags
b5.bindtags([tag1, TkButton, tag2, b5])
# create button to set button class binding
TkButton.new(:text=>'set binding to TkButton class',
:command=>proc{
puts 'call "set_class_bind"'
set_class_bind
}).pack(:pady=>7)
# start event-loop
Tk.mainloop
|