From: nagai@... Date: 2001-10-31T13:16:20+09:00 Subject: [ruby-talk:23910] Re: best way to group objects in Ruby-Tk? Hi, From: Kero van Gelder Subject: [ruby-talk:23880] Re: best way to group objects in Ruby-Tk? Date: Wed, 31 Oct 2001 08:09:16 +0900 Message-ID: <20011031000927.A1771@chmeee> kero> Maybe Hidetoshi NAGAI can shed some light on this? Do you call me? :-) Well, based on original source script, for example ---------------------------------------------------- require 'tk' class D def initialize TkRoot.new.title('Tk fun') main_canvas = TkCanvas.new.pack frame_canvas = TkCanvas.new win = TkcWindow.new(main_canvas, 1, 1, 'width'=>200, 'height'=>100, 'window'=>frame_canvas, 'anchor'=>'nw') TkcRectangle.new(frame_canvas, 5, 5, 50, 50) TkcText.new(frame_canvas, 10, 10, 'text'=>'sample text', 'anchor'=>'nw') TkFrame.new {|f| TkButton.new(f, 'text'=>'move (+10,+10)', 'command'=>proc{win.move(10,10)}).pack('side'=>'left') TkButton.new(f, 'text'=>'move (-10,-10)', 'command'=>proc{win.move(-10,-10)}).pack('side'=>'right') pack } end end D.new Tk.mainloop ---------------------------------------------------- No need 'pack' for canvas objects. They are put on the canvas as soon as creation. To define a widget on a canvas window object, please use 'window' option of TkcWindow object. The other method is to use canvas tags. Please read the following sample script. In the script, I give tags to canvas objects by 'tag' option. By Canvas tags, you can make some groups of canvas objects. By adding some tags to same canvas object, the object can belong to some groups. ---------------------------------------------------- require 'tk' class D def initialize(canvas, tag = TkcTag.new(canvas)) @canvas = canvas @tag = tag TkcOval.new(@canvas, 20, 20, 40, 40, 'tag'=>tag) TkcRectangle.new(@canvas, 5, 5, 50, 50, 'tag'=>[@tag, 'rectangle']) TkcRectangle.new(@canvas, 10, 10, 60, 60, 'tag'=>[@tag, 'rectangle']) @tag_text = TkcTag.new(@canvas) TkcText.new(@canvas, 10, 10, 'text'=>'sample text', 'anchor'=>'nw', 'tag'=>[@tag, @tag_text]) TkcText.new(@canvas, 30, 30, 'text'=>'XXXXXXX', 'anchor'=>'nw', 'tag'=>[@tag, @tag_text]) end def move(dx, dy) @tag.move(dx, dy) end def move_text(dx, dy) @tag_text.move(dx, dy) # or @canvas.move(@tag_text, dx, dy) end def move_rectangle(dx, dy) @canvas.move('rectangle', dx, dy) end end TkRoot.new.title('Tk fun') canvas = TkCanvas.new.pack #ctag = TkcTag.new(canvas) #objs = D.new(canvas, ctag) objs = D.new(canvas) TkFrame.new {|f| TkButton.new(f, 'text'=>'move (+10,+10)', 'command'=>proc{objs.move(10,10)}).pack('side'=>'left') TkButton.new(f, 'text'=>'move (-10,-10)', 'command'=>proc{objs.move(-10,-10)}).pack('side'=>'right') pack } TkFrame.new {|f| TkButton.new(f, 'text'=>'move rectangle (+10,+10)', 'command'=>proc{objs.move_rectangle(10,10)}) { pack('side'=>'left') } TkButton.new(f, 'text'=>'move rectangle (-10,-10)', 'command'=>proc{objs.move_rectangle(-10,-10)}) { pack('side'=>'right') } pack } TkFrame.new {|f| TkButton.new(f, 'text'=>'move text (+10,+10)', 'command'=>proc{objs.move_text(10,10)}).pack('side'=>'left') TkButton.new(f, 'text'=>'move text (-10,-10)', 'command'=>proc{objs.move_text(-10,-10)}).pack('side'=>'right') pack } Tk.mainloop ---------------------------------------------------- -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp