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
|
# -*- coding: euc-jp -*-
#
# checkbutton widget demo2 (called by 'widget')
#
# toplevel widget ¤¬Â¸ºß¤¹¤ì¤Ðºï½ü¤¹¤ë
if defined?($check2_demo) && $check2_demo
$check2_demo.destroy
$check2_demo = nil
end
# demo ÍѤΠtoplevel widget ¤òÀ¸À®
$check2_demo = TkToplevel.new {|w|
title("Checkbutton Demonstration 2")
iconname("check2")
positionWindow(w)
}
base_frame = TkFrame.new($check2_demo).pack(:fill=>:both, :expand=>true)
# label À¸À®
msg = TkLabel.new(base_frame) {
font $font
wraplength '4i'
justify 'left'
text "²¼¤Ë¤Ï£´¤Ä¤Î¥Á¥§¥Ã¥¯¥Ü¥¿¥ó¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥¯¥ê¥Ã¥¯¤¹¤ë¤È¥Ü¥¿¥ó¤ÎÁªÂò¾õÂÖ¤¬ÊѤï¤ê¡¢TclÊÑ¿ô¡ÊTkVariable¥ª¥Ö¥¸¥§¥¯¥È¤Ç¥¢¥¯¥»¥¹¤Ç¤¤Þ¤¹¡Ë¤Ë¤½¤Î¥Ü¥¿¥ó¤Î¾õÂÖ¤ò¼¨¤¹ÃͤòÀßÄꤷ¤Þ¤¹¡£ºÇ½é¤Î¥Ü¥¿¥ó¤Î¾õÂ֤Ͼ¤Î£³¤Ä¤Î¥Ü¥¿¥ó¤Î¾õÂ֤ˤâ°Í¸¤·¤ÆÊѲ½¤·¤Þ¤¹¡£¤â¤·£³¤Ä¤Î¥Ü¥¿¥ó¤Î°ìÉô¤À¤±¤Ë¥Á¥§¥Ã¥¯¤¬ÉÕ¤±¤é¤ì¤Æ¤¤¤ë¾ì¹ç¡¢ºÇ½é¤Î¥Ü¥¿¥ó¤Ï¥È¥é¥¤¥¹¥Æ¡¼¥È¡Ê£³¾õÂ֡˥⡼¥É¤Ç¤Îɽ¼¨¤ò¹Ô¤¤¤Þ¤¹¡£¸½ºß¤ÎÊÑ¿ô¤ÎÃͤò¸«¤ë¤Ë¤Ï¡ÖÊÑ¿ô»²¾È¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£"
}
msg.pack('side'=>'top')
# ÊÑ¿ôÀ¸À®
safety = TkVariable.new(0)
wipers = TkVariable.new(0)
brakes = TkVariable.new(0)
sober = TkVariable.new(0)
# frame À¸À®
TkFrame.new(base_frame) {|frame|
TkGrid(TkFrame.new(frame, :height=>2, :relief=>:sunken, :bd=>2),
:columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2)
TkGrid('x',
TkButton.new(frame, :text=>'ÊÑ¿ô»²¾È',
:image=>$image['view'], :compound=>:left,
:command=>proc{
showVars($check2_demo,
['safety', safety], ['wipers', wipers],
['brakes', brakes], ['sober', sober])
}),
TkButton.new(frame, :text=>'¥³¡¼¥É»²¾È',
:image=>$image['view'], :compound=>:left,
:command=>proc{showCode 'check2'}),
TkButton.new(frame, :text=>'ÊĤ¸¤ë',
:image=>$image['delete'], :compound=>:left,
:command=>proc{
tmppath = $check2_demo
$check2_demo = nil
$showVarsWin[tmppath.path] = nil
tmppath.destroy
}),
:padx=>4, :pady=>4)
frame.grid_columnconfigure(0, :weight=>1)
}.pack('side'=>'bottom', 'fill'=>'x')
# checkbutton À¸À®
TkCheckButton.new(base_frame, :text=>'°ÂÁ´À¸¡ºº', :variable=>safety,
:relief=>:flat, :onvalue=>'all', :offvalue=>'none',
:tristatevalue=>'partial'){
pack('side'=>'top', 'pady'=>2, 'anchor'=>'w')
}
[ TkCheckButton.new(base_frame, 'text'=>'¥ï¥¤¥Ñ¡¼ OK', 'variable'=>wipers),
TkCheckButton.new(base_frame, 'text'=>'¥Ö¥ì¡¼¥ OK', 'variable'=>brakes),
TkCheckButton.new(base_frame, 'text'=>'±¿Å¾¼ê ÁÇÌÌ', 'variable'=>sober)
].each{|w|
w.relief('flat')
w.pack('side'=>'top', 'padx'=>15, 'pady'=>2, 'anchor'=>'w')
}
# tristate check
in_check = false
tristate_check = proc{|n1,n2,op|
unless in_check
in_check = true
begin
if n1 == safety
if safety == 'none'
wipers.value = 0
brakes.value = 0
sober.value = 0
elsif safety == 'all'
wipers.value = 1
brakes.value = 1
sober.value = 1
end
else
if wipers == 1 && brakes == 1 && sober == 1
safety.value = 'all'
elsif wipers == 1 || brakes == 1 || sober == 1
safety.value = 'partial'
else
safety.value = 'none'
end
end
ensure
in_check = false
end
end
}
[wipers, brakes, sober, safety].each{|v| v.trace('w', tristate_check)}
|