1# -*- coding: utf-8 -*- 2# 3# radio3.rb 4# 5# This demonstration script creates a toplevel window containing 6# several radiobutton widgets. 7# 8# radiobutton widget demo (called by 'widget') 9# 10 11# toplevel widget 12if defined?($radio3_demo) && $radio3_demo 13 $radio3_demo.destroy 14 $radio3_demo = nil 15end 16 17# demo toplevel widget 18$radio3_demo = TkToplevel.new {|w| 19 title("Radiobutton Demonstration 3") 20 iconname("radio3") 21 positionWindow(w) 22} 23 24base_frame = TkFrame.new($radio3_demo).pack(:fill=>:both, :expand=>true) 25 26# label 27msg = TkLabel.new(base_frame) { 28 font $font 29 wraplength '5i' 30 justify 'left' 31 text '下には3つのラジオボタングループが表示されています。ボタンをクリックすると、そのグループに属するすべてのボタンの中でクリックしたボタンだけが選択された状態になります。各グループには、そのグループの中のどのボタンが選択されているかを示す変数が割り当てられています。「トライステート」ボタンが押されたときには、ラジオボタンの表示がトライステートモードになります。いずれかのボタンを選択すれば、ボタンの状態は元のように個々のボタンのon/off状態を示すようになります。現在の変数の値を見るには「変数参照」ボタンをクリックしてください。' 32} 33msg.grid(:row=>0, :column=>0, :columnspan=>3, :sticky=>'nsew') 34 35# variable 36size = TkVariable.new 37color = TkVariable.new 38align = TkVariable.new 39 40# frame 41TkFrame.new(base_frame) {|frame| 42 TkGrid(TkFrame.new(frame, :height=>2, :relief=>:sunken, :bd=>2), 43 :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) 44 TkGrid('x', 45 TkButton.new(frame, :text=>'変数参照', 46 :image=>$image['view'], :compound=>:left, 47 :command=>proc{ 48 showVars(base_frame, ['size', size], 49 ['color', color], ['compound', align]) 50 }), 51 TkButton.new(frame, :text=>'コード参照', 52 :image=>$image['view'], :compound=>:left, 53 :command=>proc{showCode 'radio3'}), 54 TkButton.new(frame, :text=>'閉じる', 55 :image=>$image['delete'], :compound=>:left, 56 :command=>proc{ 57 tmppath = $radio3_demo 58 $radio3_demo = nil 59 $showVarsWin[tmppath.path] = nil 60 tmppath.destroy 61 }), 62 :padx=>4, :pady=>4) 63 frame.grid_columnconfigure(0, :weight=>1) 64 TkGrid(frame, :row=>3, :column=>0, :columnspan=>3, :sticky=>'nsew') 65} 66 67# frame 68f_left = TkLabelFrame.new(base_frame, 'text'=>'文字サイズ', 69 'pady'=>2, 'padx'=>2) 70f_mid = TkLabelFrame.new(base_frame, 'text'=>'色', 71 'pady'=>2, 'padx'=>2) 72f_right = TkLabelFrame.new(base_frame, 'text'=>'ビットマップ配置', 73 'pady'=>2, 'padx'=>2) 74f_left .grid('column'=>0, 'row'=>1, 'pady'=>'.5c', 'padx'=>'.5c', 'rowspan'=>2) 75f_mid .grid('column'=>1, 'row'=>1, 'pady'=>'.5c', 'padx'=>'.5c', 'rowspan'=>2) 76f_right.grid('column'=>2, 'row'=>1, 'pady'=>'.5c', 'padx'=>'.5c') 77 78TkButton.new(base_frame, 'text'=>'トライステート', 79 'command'=>proc{size.value = 'multi'; color.value = 'multi'}){ 80 grid('column'=>2, 'row'=>2, 'pady'=>'.5c', 'padx'=>'.5c') 81} 82 83# radiobutton 84[10, 12, 14, 18, 24].each {|sz| 85 TkRadioButton.new(f_left) { 86 text "ポイントサイズ #{sz}" 87 variable size 88 relief 'flat' 89 value sz 90 tristatevalue 'multi' 91 }.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w', 'fill'=>'x') 92} 93 94['Red', 'Green', 'Blue', 'Yellow', 'Orange', 'Purple'].each {|col| 95 TkRadioButton.new(f_mid) { 96 text col 97 variable color 98 relief 'flat' 99 value col.downcase 100 anchor 'w' 101 tristatevalue 'multi' 102 command proc{f_mid.fg(color.value)} 103 }.pack('side'=>'top', 'pady'=>2, 'fill'=>'x') 104} 105 106# label = TkLabel.new(f_right, 'text'=>'ラベル', 'bitmap'=>'questhead', 107label = Tk::Label.new(f_right, 'text'=>'ラベル', 'bitmap'=>'questhead', 108 'compound'=>'left') 109label.configure('width'=>TkWinfo.reqwidth(label), 'compound'=>'top') 110label.height(TkWinfo.reqheight(label)) 111a_btn = ['Top', 'Left', 'Right', 'Bottom'].collect{|a| 112 TkRadioButton.new(f_right, 'text'=>a, 'variable'=>align, 'relief'=>'flat', 113 'value'=>a.downcase, 'indicatoron'=>0, 'width'=>7, 114 'command'=>proc{label.compound(align.value)}) 115} 116 117Tk.grid('x', a_btn[0]) 118Tk.grid(a_btn[1], label, a_btn[2]) 119Tk.grid('x', a_btn[3]) 120