リスト : 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 を選択
エントリーで身長を入力
リターンキーで更新