From: Hidetoshi NAGAI Date: 2004-05-06T13:41:17+09:00 Subject: Re: Using TkTree - Desperately need help Hi, From: dejaspam@batkins.com (Bill Atkins) Subject: Using TkTree - Desperately need help Date: Wed, 5 May 2004 01:18:56 +0900 Message-ID: > Can anyone give me a step-by-step method of using TkTree on Win32? I > don't know how to make tcltk-ext work, so any help would be > appreciated. If the 'TkTree' which you said is the script at , you will not need to use tcltk-ext because there are only 5 commands introduced by the library. Although I think you can write a library script for TkTree widgets, I append a sample library at the end of this mail. To install, step1: make TkTree work on Tcl/Tk (1) save Tcl source script (e.g. 'tktree.tcl'). (2) copy the script file to Tcl/Tk library directory. (3) start wish or tclsh, and do 'auto_mkindex '. (4) restart wish, and do the test script at . step2: try on Ruby/Tk (1) save the following library script as 'tktree.rb'. (2) /ruby tktree.rb (3) move tktree.rb to your ruby library path. (4) 'require "tktree"' on your script. --------------------------------------------------- ########################################################################## # TkTree widget class # # see http://wiki.tcl.tk/10615 # # Note: optional argument '-font' of the Tcl library is changed to # 'itemfont' on this Ruby library, because of avoiding font # operation trouble in 'initialize' method ( see the following # test script ). # ########################################################################## require 'tk' class TkTree < TkCanvas def create_self(keys) if keys.kind_of?(Hash) font = keys.delete('itemfont') keys['font'] = font if font tk_call('::tktree::treecreate', @path, *hash_kv(keys)) else tk_call('::tktree::treecreate', @path) end end def newitem(itempath, keys = nil) if keys.kind_of?(Hash) keys = _symbolkey2str(keys) font = keys.delete('itemfont') keys['font'] = font if font tk_call('::tktree::newitem', @path, itempath, *hash_kv(keys)) else tk_call('::tktree::newitem', @path, itempath) end end def delitem(itempath) tk_call('::tktree::delitem', @path, itempath) end def labelat(xpos, ypos) tk_call('::tktree::delitem', @path, xpos, ypos) end def getselection tk_call('::tktree::getselection', @path) end def setselection(itempath) tk_call('::tktree::getselection', @path, itempath) end end ########################################################################## # test script ########################################################################## if __FILE__ == $0 items = %w(/group1/item1 /group1/item2 /group1/subgroup/item1 /group2/item1 /item1) tr1 = TkTree.new.pack(:expand=>true, :fill=>:both) tr1.focus items.each{|item| tr1.newitem(item, :command=>proc{Tk.messageBox(:message=>"#{item} executed")}) } f = TkFrame.new.pack(:expand=>true, :fill=>:both) tr2 = TkTree.new(f, :bg=>'black', :itemfont=>{:family=>'Times', :size=>14}, :textcolor=>'red', :bd=>4, :relief=>:ridge, :selectbackground=>'darkBlue', :selectforeground=>'yellow', :selectborderwidth=>3, :linecolor=>'yellow') { yscrollbar(TkScrollbar.new(f, :width=>10).pack(:side=>:right, :fill=>:y)) xscrollbar(TkScrollbar.new(f, :width=>10).pack(:side=>:bottom, :fill=>:x)) pack(:expand=>true, :fill=>:both) } items.each{|item| tr2.newitem(item, :textcolor=>'green', :image=>'', :itemfont=>{:family=>'Times', :size=>10}, :command=>proc{Tk.messageBox(:message=>"#{item} executed")}) } Tk.mainloop end --------------------------------------------------- -- Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)