リスト : Ttk Widget の簡単な使用例
# coding: utf-8
require 'tk'
Tk.default_widget_set = :Ttk
Ttk::Style.configure('.', font: ['', 12]) # Ttk Widget のフォントの大きさを 12 に変更
$theme = ARGV[0]
Ttk::Style.theme_use($theme)
# ラジオボタン用
$v = TkVariable.new(1)
# チェックボタン用
$opts = [
TkVariable.new(true),
TkVariable.new(false),
TkVariable.new(true),
TkVariable.new(false),
]
# テーマ表示用ラベル
TkLabel.new(text: $theme).pack
# ボタン類の配置
$f0 = TkLabelFrame.new(text: 'Buttons')
$f1 = TkLabelFrame.new(text: 'CheckButtons')
$f2 = TkLabelFrame.new(text: 'RadioButtons')
for x in 0 .. 3
TkButton.new($f0, text: "button #{x}").pack
TkRadiobutton.new($f1, text: "radiobutton #{x}", value: x, variable: $v).pack
TkCheckbutton.new($f2, text: "checkbutton #{x}", variable: $opts[x]).pack
end
$f0.pack(padx: 5, pady: 5, side: 'left')
$f1.pack(padx: 5, pady: 5, side: 'left')
$f2.pack(padx: 5, pady: 5, side: 'left')
Tk.mainloop




リスト : Ttk Widget の簡単な使用例
# coding: utf-8
require 'tk'
Tk.default_widget_set = :Ttk
Ttk::Style.configure('.', font: ['', 12])
Ttk::Style.configure('test1.TLabel', font: ['', 12])
Ttk::Style.configure('test2.TLabel', font: ['serif', 14], foreground: 'blue')
Ttk::Style.configure('test3.TLabel', font: ['monospace', 16, 'italic'], foreground: 'green')
$str = 'Hello, world, こんにちは世界';
TkLabel.new(text: $str, style: 'test1.TLabel').pack
TkLabel.new(text: $str, style: 'test2.TLabel').pack
TkLabel.new(text: $str, style: 'test3.TLabel').pack
Tk.mainloop

TkCombobox.new(parent, option: value, ...);
| height | リストボックスの行数 |
| width | エントリーの文字数 |
| state | 'normal' : エントリーとリストボックスの両方から入力できる 'readonly' : リストボックスのみ有効 'disabled' : どちらも無効 |
| values | リストボックスに表示するデータを格納した文字列 (または配列) |
リスト : コンボボックスの使用例
# coding: utf-8
require 'date'
require 'tk'
Tk.default_widget_set = :Ttk
Ttk::Style.configure('.', font: ['', 12])
$label_buff = TkVariable.new('')
$year_buff = TkVariable.new('1970')
$month_buff = TkVariable.new('1')
$day_buff = TkVariable.new('1')
$la = TkLabel.new(textvariable: $label_buff)
$la.pack
TkLabel.new(text: " 年: ").pack(side: 'left')
$year_cb = TkCombobox.new(textvariable: $year_buff, width: 8, values: [*1970 .. 2031])
$year_cb.pack(side: 'left')
TkLabel.new(text: " 月: ").pack(side: 'left')
$month_cb = TkCombobox.new(textvariable: $month_buff, width: 8, height: 12, values: [*1 .. 12])
$month_cb.pack(side: 'left')
TkLabel.new(text: " 日: ").pack(side: 'left')
$day_cb = TkCombobox.new(textvariable: $day_buff, width: 8, values: [*1 .. 31])
$day_cb.pack(side: 'left')
# 入力データの表示
def get_item
y = $year_cb.value
m = $month_cb.value
d = $day_cb.value
if Date.valid_date?(y.to_i, m.to_i, d.to_i)
$label_buff.value=("#{y}年 #{m} 月 #{d} 日")
else
$label_buff.value=("Input Error")
end
end
$year_cb.bind('<ComboboxSelected>', proc { get_item })
$year_cb.bind('Return', proc { get_item })
$month_cb.bind('<ComboboxSelected>', proc { get_item })
$month_cb.bind('Return', proc { get_item })
$day_cb.bind('<ComboboxSelected>', proc { get_item })
$day_cb.bind('Return', proc { get_item })
get_item()
Tk.mainloop
初期状態
日付の入力
エラー
リスト : ノートブックの使用例 (1)
# coding: utf-8
require 'tk'
Tk.default_widget_set = :Ttk
Ttk::Style.configure("TButton", font: ['', 12])
Ttk::Style.configure("TRadiobutton", font: ['', 12])
Ttk::Style.configure("TCheckbutton", font: ['', 12])
$v = TkVariable.new(0)
$opts = [
TkVariable.new(true),
TkVariable.new(true),
TkVariable.new(true),
TkVariable.new(true)
]
# ノートブック
$nb = TkNotebook.new
$nb.pack
# ボタン類の配置
$f0 = TkFrame.new
$f1 = TkFrame.new
$f2 = TkFrame.new
for x in 0 .. 3
TkButton.new($f0, text: "button #{x}").pack
TkRadiobutton.new($f1, text: "radiobutton #{x}", value: x, variable: $v).pack
TkCheckbutton.new($f2, text: "checkbutton #{x}", variable: $opts[x]).pack
end
$nb.add($f0, text: 'Button', padding: 20)
$nb.add($f1, text: 'Radio', padding: 20)
$nb.add($f2, text: 'Check', padding: 20)
Tk.mainloop
初期状態 (Button が選択されている)
Radio を選択
Check を選択
リスト : ノートブックの使用例 (2)
# coding: utf-8
require 'tk'
TkOptionDB.add('*Text.font', ['Ricty Diminished', 12])
# 生成したテキストウィジェットの個数
$text_count = 0
# ノートブック
$nb = TkNotebook.new
# テキストウィジェットを追加
def new_text
tw = TkText.new(width: 40, height: 10)
$text_count += 1
$nb.add(tw, text: "Memo#{$text_count}")
$nb.select(tw);
end
# テキストウィジェットを削除
def del_text
$nb.forget('current')
end
# ボタン
$fr = TkFrame.new
TkButton.new($fr, text: 'New', command: proc { new_text }).pack(side: 'left')
TkButton.new($fr, text: 'Del', command: proc { del_text }).pack(side: 'left')
# 配置
$fr.pack(anchor: 'w');
$nb.pack
Tk.mainloop
初期状態
Memo1 を生成
Memo2 を生成
Memo3 を生成して Memo2 を削除
リスト : プログレスバーの使用例
require 'tk'
Tk.default_widget_set = :Ttk
$var = TkVariable.new(0)
$pb1_obj = nil
def start_pb1
$var.numeric=(0)
$pb1_obj = TkAfter.start(40, 100) {
$var.numeric=($var.numeric + 1)
}
end
def stop_pb1
if $pb1_obj
$pb1_obj.stop
$pb1_obj = nil
end
end
$pb1 = TkProgressbar.new(length: 200, variable: $var)
$pb2 = TkProgressbar.new(length: 200, mode: 'indeterminate')
$pb1.pack
$f1 = TkFrame.new
TkButton.new($f1, text: 'Start', command: proc {start_pb1}).pack(side: 'left')
TkButton.new($f1, text: 'Stop', command: proc {stop_pb1}).pack(side: 'left')
$f1.pack
$pb2.pack
$f2 = TkFrame.new
TkButton.new($f2, text: 'Start', command: proc { $pb2.start(10) }).pack(side: 'left')
TkButton.new($f2, text: 'Stop', command: proc { $pb2.stop }).pack(side: 'left')
$f2.pack
Tk.mainloop
初期状態
途中経過
pb1 が終了し、pb2 を停止した状態
リスト : ツリービューの簡単な使用例 (1)
# coding: utf-8
require 'tk'
Tk.default_widget_set = :Ttk
Ttk::Style.configure('.', font: ['', 12])
$tview = TkTreeview.new(columns: ['Name', 'Height'])
$tview.column_configure('#0', width: 50)
$tview.column_configure('Name', anchor: 'w', width: 100)
$tview.column_configure('Height', anchor: 'e', width: 50)
$tview.heading_configure('#0', text: "クラス")
$tview.heading_configure('Name', text: "名前")
$tview.heading_configure('Height', text: "身長")
id = $tview.insert('', 'end', text: 'A')
$tview.insert(id, 'end', values: ['Ada', 148.7])
$tview.insert(id, 'end', values: ['Hanna', 154.2])
$tview.insert(id, 'end', values: ['Miranda', 148.2])
id = $tview.insert('', 'end', text: 'B')
$tview.insert(id, 'end', values: ['Alice', 149.5])
$tview.insert(id, 'end', values: ['Janet', 147.8])
$tview.insert(id, 'end', values: ['Sara', 153.1])
id = $tview.insert('', 'end', text: 'C')
$tview.insert(id, 'end', values: ['Carey', 133.7])
$tview.insert(id, 'end', values: ['Linda', 154.6])
$tview.insert(id, 'end', values: ['Tracy', 138.2])
id = $tview.insert('', 'end', text: 'D')
$tview.insert(id, 'end', values: ['Ellen', 157.9])
$tview.insert(id, 'end', values: ['Maria', 159.1])
$tview.insert(id, 'end', values: ['Violet', 138.7])
$sb = TkYScrollbar.new
$sb.assign($tview)
$tview.pack(side: 'left')
$sb.pack(side: 'left', fill: 'y')
Tk.mainloop
初期状態
クラス A を表示
クラス A と C を表示
全クラスを表示
get(item, column) set(item, column, value);
リスト : 身長の更新機能を追加
# coding: utf-8
require 'tk'
Tk.default_widget_set = :Ttk
Ttk::Style.configure('.', font: ['', 12])
$buff1 = TkVariable.new(' ')
$buff2 = TkVariable.new('')
$select_item = nil
$fr = TkFrame.new
TkLabel.new($fr, textvariable: $buff1).pack(side: 'left')
$e = TkEntry.new($fr, width: 8, textvariable: $buff2)
$e.pack(side: 'left')
$fr.pack(anchor: 'w')
$tview = TkTreeview.new(columns: ['Name', 'Height'])
$tview.column_configure('#0', width: 50)
$tview.column_configure('Name', anchor: 'w', width: 100)
$tview.column_configure('Height', anchor: 'e', width: 50)
$tview.heading_configure('#0', text: "クラス")
$tview.heading_configure('Name', text: "名前")
$tview.heading_configure('Height', text: "身長")
id = $tview.insert('', 'end', text: 'A')
$tview.insert(id, 'end', values: ['Ada', 148.7])
$tview.insert(id, 'end', values: ['Hanna', 154.2])
$tview.insert(id, 'end', values: ['Miranda', 148.2])
id = $tview.insert('', 'end', text: 'B')
$tview.insert(id, 'end', values: ['Alice', 149.5])
$tview.insert(id, 'end', values: ['Janet', 147.8])
$tview.insert(id, 'end', values: ['Sara', 153.1])
id = $tview.insert('', 'end', text: 'C')
$tview.insert(id, 'end', values: ['Carey', 133.7])
$tview.insert(id, 'end', values: ['Linda', 154.6])
$tview.insert(id, 'end', values: ['Tracy', 138.2])
id = $tview.insert('', 'end', text: 'D')
$tview.insert(id, 'end', values: ['Ellen', 157.9])
$tview.insert(id, 'end', values: ['Maria', 159.1])
$tview.insert(id, 'end', values: ['Violet', 138.7])
$sb = TkYScrollbar.new
$sb.assign($tview)
$tview.pack(side: 'left')
$sb.pack(side: 'left', fill: 'y')
# 生徒の選択
def select_student
x = $tview.selection()
n = $tview.get(x[0], 'Name')
if n
$buff1.value=(sprintf("%8s", n))
$buff2.value=($tview.get(x[0], 'Height'))
$select_item = x[0]
else
$buff1.value=(' ')
$buff2.value=('')
$select_item = nil
end
end
# 身長の更新
def update_height
if $select_item
$tview.set($select_item, 'Height', $buff2.value)
end
end
# バインディング
$e.bind('Return', proc { update_height })
$tview.bind('<TreeviewSelect>', proc { select_student })
Tk.mainloop
Alice を選択
エントリーで身長を入力
リターンキーで更新