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: utf-8 -*-
#
# 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)}
|