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
|
#!/usr/bin/env ruby
#
# menubutton sample : based on sample menubuttons on the Tcl/Tk demo script
#
require 'tk'
TkLabel.new(:text=>'Sample of TkMenubutton').pack(:side=>:top)
TkFrame.new{|f|
pack(:side=>:top)
TkMenubutton.new(:parent=>f, :text=>'Right', :underline=>0,
:direction=>:right, :relief=>:raised){|mb|
menu TkMenu.new(:parent=>mb, :tearoff=>0){
add(:command, :label=>'Right menu: first item',
:command=>proc{print 'You have selected the first item' +
" from the Right menu.\n"})
add(:command, :label=>'Right menu: second item',
:command=>proc{print 'You have selected the second item' +
" from the Right menu.\n"})
}
pack(:side=>:left, :padx=>25, :pady=>25)
}
TkMenubutton.new(:parent=>f, :text=>'Below', :underline=>0,
:direction=>:below, :relief=>:raised){|mb|
menu(TkMenu.new(:parent=>mb, :tearoff=>0){
add(:command, :label=>'Below menu: first item',
:command=>proc{print 'You have selected the first item' +
" from the Below menu.\n"})
add(:command, :label=>'Below menu: second item',
:command=>proc{print 'You have selected the second item' +
" from the Below menu.\n"})
})
pack(:side=>:left, :padx=>25, :pady=>25)
}
TkMenubutton.new(:parent=>f, :text=>'Above', :underline=>0,
:direction=>:above, :relief=>:raised){|mb|
menu TkMenu.new(:parent=>mb, :tearoff=>0){
add(:command, :label=>'Above menu: first item',
:command=>proc{print 'You have selected the first item' +
" from the Above menu.\n"})
add(:command, :label=>'Above menu: second item',
:command=>proc{print 'You have selected the second item' +
" from the Above menu.\n"})
}
pack(:side=>:left, :padx=>25, :pady=>25)
}
TkMenubutton.new(:parent=>f, :text=>'Left', :underline=>0,
:direction=>:left, :relief=>:raised){|mb|
menu(TkMenu.new(:parent=>mb, :tearoff=>0){
add(:command, :label=>'Left menu: first item',
:command=>proc{print 'You have selected the first item' +
" from the Left menu.\n"})
add(:command, :label=>'Left menu: second item',
:command=>proc{print 'You have selected the second item' +
" from the Left menu.\n"})
})
pack(:side=>:left, :padx=>25, :pady=>25)
}
}
############################
TkFrame.new(:borderwidth=>2, :relief=>:sunken,
:height=>5).pack(:side=>:top, :fill=>:x, :padx=>20)
############################
TkLabel.new(:text=>'Sample of TkOptionMenu').pack(:side=>:top)
colors = %w(Black red4 DarkGreen NavyBlue gray75 Red Green Blue gray50
Yellow Cyan Magenta White Brown DarkSeaGreen DarkViolet)
TkFrame.new{|f|
pack(:side=>:top)
b1 = TkOptionMenubutton .
new(:parent=>f, :values=>%w(one two three)) .
pack(:side=>:left, :padx=>25, :pady=>25)
b2 = TkOptionMenubutton.new(:parent=>f, :values=>colors) {|optMB|
colors.each{|color|
no_sel = TkPhotoImage.new(:height=>16, :width=>16){
put 'gray50', *[ 0, 0, 16, 1]
put 'gray50', *[ 0, 1, 1, 16]
put 'gray75', *[ 0, 15, 16, 16]
put 'gray75', *[15, 1, 16, 16]
put color, *[ 1, 1, 15, 15]
}
sel = TkPhotoImage.new(:height=>16, :width=>16){
put 'Black', *[ 0, 0, 16, 2]
put 'Black', *[ 0, 2, 2, 16]
put 'Black', *[ 2, 14, 16, 16]
put 'Black', *[14, 2, 16, 14]
put color, *[ 2, 2, 14, 14]
}
optMB.entryconfigure(color, :hidemargin=>1,
:image=>no_sel, :selectimage=>sel)
}
optMB.menuconfigure(:tearoff, 1)
%w(Black gray75 gray50 White).each{|color|
optMB.entryconfigure(color, :columnbreak=>true)
}
pack(:side=>:left, :padx=>25, :pady=>25)
}
TkButton.new(:parent=>f){
text 'show values'
command proc{p [b1.value, b2.value]}
pack(:side=>:left, :padx=>25, :pady=>5, :anchor=>:s)
}
}
############################
TkFrame.new(:borderwidth=>2, :relief=>:sunken,
:height=>5).pack(:side=>:top, :fill=>:x, :padx=>20)
############################
root = TkRoot.new(:title=>'menubutton samples')
TkButton.new(root, :text=>'exit', :command=>proc{exit}){
pack(:side=>:top, :padx=>25, :pady=>5, :anchor=>:e)
}
# VirtualEvent <<MenuSelect>> on Tcl/Tk ==> '<MenuSelect>' on Ruby/Tk
# ( remove the most external <, > for Ruby/Tk notation )
TkMenu.bind('<MenuSelect>', proc{|widget|
p widget.entrycget('active', :label)
}, '%W')
############################
Tk.mainloop
|