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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
# -*- coding: utf-8 -*-
#
# ttkbut.rb
#
# This demonstration script creates a toplevel window containing several
# simple Ttk widgets, such as labels, labelframes, buttons, checkbuttons and
# radiobuttons.
#
# based on "Id: ttkbut.tcl,v 1.4 2007/12/13 15:27:07 dgp Exp"
if defined?($ttkbut_demo) && $ttkbut_demo
$ttkbut_demo.destroy
$ttkbut_demo = nil
end
$ttkbut_demo = TkToplevel.new {|w|
title("Simple Ttk Widgets")
iconname("ttkbut")
positionWindow(w)
}
base_frame = TkFrame.new($ttkbut_demo).pack(:fill=>:both, :expand=>true)
Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'4i', :justify=>:left,
:text=><<EOL).pack(:side=>:top, :fill=>:x)
Ttkã¨ã¯ï¼Œãƒ†ãƒ¼ãƒžæŒ‡å®šå¯èƒ½ãªæ–°ã—ã„ウィジェット集åˆã§ã™ï¼Ž\
今,ã‚ãªãŸãŒç›®ã«ã—ã¦ã„ã‚‹ã®ã¯Ttkã®ãƒ†ãƒ¼ãƒžåŒ–ラベルã§ï¼Œ\
下ã«ã¯Ttkã®ãƒ©ãƒ™ãƒ«ãƒ•レームã®ä¸ã«ä¸‰ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®TtkウィジェットãŒ\
表示ã•れã¦ã„ã¾ã™ï¼Ž
最åˆã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯å…¨ã¦ãƒœã‚¿ãƒ³ã§ã‚り,\
ãれãžã‚Œã‚¯ãƒªãƒƒã‚¯ã™ã‚Œã°ç¾åœ¨ã®ã‚¢ãƒ—リケーションã®ãƒ†ãƒ¼ãƒžãŒè¨å®šã•れã¾ã™ï¼Ž
2番目ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ä¸‰ã¤ã®ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³é›†åˆã§ã™ï¼Ž\
å„集åˆã®é–“ã«ã¯ï¼Œã‚»ãƒ‘レータウィジェットãŒç½®ã‹ã‚Œã¦ã„ã¾ã™ï¼Ž\
ãªãŠã€Œæœ‰åŠ¹åŒ–ã€ãƒœã‚¿ãƒ³ã¯ï¼Œã“ã®ãƒˆãƒƒãƒ—レベルウィジェット内ã®\
ä»–ã®ã™ã¹ã¦ã®ãƒ†ãƒ¼ãƒžåŒ–ウィジェットã®çŠ¶æ…‹(state)ãŒ"disabled"ã‹ã©ã†ã‹ã‚’\
コントãƒãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„.
3番目ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯é–¢é€£ä»˜ã‘られãŸãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³é›†åˆã¨ãªã£ã¦ã„ã¾ã™ï¼Ž
EOL
## Add buttons for setting the theme
buttons = Ttk::Labelframe.new(base_frame, :text=>'ボタン')
# Ttk::Style.theme_names.each{|theme|
# Ttk::Button.new(buttons, :text=>theme,
# :command=>proc{Ttk::Style.theme_use theme}).pack(:pady=>2)
# }
Ttk.themes.each{|theme|
Ttk::Button.new(buttons, :text=>theme,
:command=>proc{Ttk.set_theme theme}).pack(:pady=>2)
}
## Helper procedure for the top checkbutton
def setState(root, value, *excepts)
return if excepts.member?(root)
## Non-Ttk widgets (e.g. the toplevel) will fail, so make it silent
begin
root.state = value
rescue
end
## Recursively invoke on all children of this root that are in the same
## toplevel widget
root.winfo_children.each{|w|
setState(w, value, *excepts) if w.winfo_toplevel == root.winfo_toplevel
}
end
## Set up the checkbutton group
checks = Ttk::Labelframe.new(base_frame, :text=>'ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³')
enabled = TkVariable.new(true)
e = Ttk::Checkbutton.new(checks, :text=>'有効化', :variable=>enabled,
:command=>proc{
setState($ttkbut_demo,
((enabled.bool)? "!disabled" : "disabled"),
e)
})
## See ttk_widget(n) for other possible state flags
sep1 = Ttk::Separator.new(checks)
sep2 = Ttk::Separator.new(checks)
cheese = TkVariable.new
tomato = TkVariable.new
basil = TkVariable.new
oregano = TkVariable.new
c1 = Ttk::Checkbutton.new(checks, :text=>'ãƒãƒ¼ã‚º', :variable=>cheese)
c2 = Ttk::Checkbutton.new(checks, :text=>'トマト', :variable=>tomato)
c3 = Ttk::Checkbutton.new(checks, :text=>'ãƒã‚¸ãƒ«', :variable=>basil)
c4 = Ttk::Checkbutton.new(checks, :text=>'オレガノ', :variable=>oregano)
Tk.pack(e, sep1, c1, c2, sep2, c3, c4, :fill=>:x, :pady=>2)
## Set up the radiobutton group
radios = Ttk::Labelframe.new(base_frame, :text=>'ラジオボタン')
happyness = TkVariable.new
r1 = Ttk::Radiobutton.new(radios, :variable=>happyness,
:text=>'Great', :value=>'great')
r2 = Ttk::Radiobutton.new(radios, :variable=>happyness,
:text=>'Good', :value=>'good')
r3 = Ttk::Radiobutton.new(radios, :variable=>happyness,
:text=>'Ok', :value=>'ok')
r4 = Ttk::Radiobutton.new(radios, :variable=>happyness,
:text=>'Poor', :value=>'poor')
r5 = Ttk::Radiobutton.new(radios, :variable=>happyness,
:text=>'Awful', :value=>'awful')
Tk.pack(r1, r2, r3, r4, r5, :fill=>:x, :padx=>3, :pady=>2)
## See Code / Dismiss
Ttk::Frame.new(base_frame) {|frame|
sep = Ttk::Separator.new(frame)
Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2)
TkGrid('x',
Ttk::Button.new(frame, :text=>'変数å‚ç…§',
:image=>$image['view'], :compound=>:left,
:command=>proc{
showVars(base_frame, ['有効化', enabled],
['ãƒãƒ¼ã‚º', cheese], ['トマト', tomato],
['ãƒã‚¸ãƒ«', basil], ['オレガノ', oregano],
['幸ç¦åº¦', happyness])
}),
Ttk::Button.new(frame, :text=>'コードå‚ç…§',
:image=>$image['view'], :compound=>:left,
:command=>proc{showCode 'ttkbut'}),
Ttk::Button.new(frame, :text=>'é–‰ã˜ã‚‹',
:image=>$image['delete'], :compound=>:left,
:command=>proc{
tmppath = $ttkbut_demo
$ttkbut_demo = nil
$showVarsWin[tmppath.path] = nil
tmppath.destroy
}),
:padx=>4, :pady=>4)
grid_columnconfigure(0, :weight=>1)
pack(:side=>:bottom, :fill=>:x, :expand=>true)
}
## Arrange things neatly
f = Ttk::Frame.new(base_frame).pack(:fill=>:both, :expand=>true)
f.lower
Tk.grid(buttons, checks, radios, :in=>f, :sticky=>'nwe', :pady=>2, :padx=>3)
f.grid_columnconfigure([0, 1, 2], :weight=>1, :uniform=>:yes)
|