From: Hidetoshi NAGAI Date: 2003-06-23T01:27:10+09:00 Subject: Re: Exasperated with ruby/tk - anybody successfully using it? From: "Richard Browne" Subject: Exasperated with ruby/tk - anybody successfully using it? Date: Sun, 22 Jun 2003 10:53:37 +0900 Message-ID: <017401c33860$ff13a800$0200a8c0@hal9000> > - Attempt to use TkSpinbox result in 'tk_call': invalid command name > `spinbox' 'spinbox' is the feature of Tk8.4. If your Ruby/Tk doesn't link the Tk8.4 library, cannot use TkSpinbox on your Ruby/Tk. > - Attempt to use TkOptionMenubutton results in `__invoke': unknown option > "-kind_of" > - The event with TkOptionMenubutton does not work properly > - Attempt to use the -command option with TkOptionMenubutton results in > `__invoke': unknown option "-command" Probably you didn't write with Ruby/Tk notation. On Ruby/Tk, each option doesn't have '-' on its head. Please see the sample script for menubuttons on this mail. > - I upgraded to ruby180-9 from http://rubyinstaller.sourceforge.net/, and > after doing so the Tk.mainloop call never even returns!! I'm sorry, but I don't know about the package. I have no answer about this. Hidetoshi Nagai (nagai@ai.kyutech.ac.jp) ------------------------------------------------------------- #!/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 <> on Tcl/Tk ==> '' on Ruby/Tk # ( remove the most external <, > for Ruby/Tk notation ) TkMenu.bind('', proc{|widget| p widget.entrycget('active', :label) }, '%W') ############################ Tk.mainloop