Hi,
From: (e-mail address removed) (Bill Atkins)
Subject: Using TkTree - Desperately need help
Date: Wed, 5 May 2004 01:18:56 +0900
Message-ID: said:
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 <
http://wiki.tcl.tk/10615>,
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 <library-directory>'.
(4) restart wish, and do the test script at <
http://wiki.tcl.tk/10615>.
step2: try on Ruby/Tk
(1) save the following library script as 'tktree.rb'.
(2) <your ruby path>/ruby tktree.rb
(3) move tktree.rb to your ruby library path.
(4) 'require "tktree"' on your script.
-----------<cut>-----------<cut>-----------<cut>------------------
##########################################################################
# 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
-----------<cut>-----------<cut>-----------<cut>------------------