2012-10-17 89 views
0

我已經建造一個樹vieew使用Bwidgets,現在我想將其轉換爲TREECTRL,但我無法在TREECTRL找出相應的命令爲Bwidget命令:等效命令在TREECTRL

$tree itemcget $node -data 

回答

1

有似乎沒有任何將用戶指定的數據直接附加到TkTreeCtrl中的節點的機制。解決此問題的最簡單方法是將數據存儲在數組中,而不是按節點的ID進行索引(如果您在應用程序中使用多個數據庫,則使用樹部件名稱)。

# Set the value (assuming you're only making one item here) 
set id [$tree item create ...] 
set ::userdata($tree,$id) $yourDataItem 
# Get the value for a particular item 
set id [$tree item id $itemDesc] 
puts "the data for $id is $::userdata($tree,$id)" 
# Remove the value when removing the item 
set id [$tree item id $itemDesc] 
unset ::userdata($tree,$id) 
$tree item delete $id 

我已經看到了一些人推薦類內部包裝TkTreeCtrl(例如,斯耐特,TclOO,XOTcl),以更簡單地在特定情況下使用。這是哪門子的,將是很好的包裹的東西...

+0

非常感謝Mr.Fellows,會試用 – NANDAGOPAL

+0

先生,我在下面發佈了我使用的解決方案,但是我無法得到它是如何工作的概念,是否有可能發佈爲什麼你認爲它工作。 – NANDAGOPAL

0

關於問題,我的項目負責人出來與用戶指定的數據附加到TREECTRL節點一個非常簡單的解決方案,

您與創建節點嵌入式

$tree item element configure $itemID $columnID elemText -text $text -data $data 

然後當u要使用的數據爲任何目的

set dataObj [$tree item element cget $itemID $columnID elemText -data] 

現在數據被保存在dataObj,你可以使用數據它的任何操作,操縱,它給了我Bwidget樹命令的確切功能 - 關於格式

$tree itemcget $node -data ------> which i thought was not directly possible in TreeCtrl. 

我會後下面示例程序,您嘗試它,遺憾:

package require treectrl 
package require TclOO 

oo::class create Foo { 
    method test { obj } { 
     puts "This is otuput from test method in instant of class D. $obj" 
    } 
} 


treectrl .t -showheader 0 -selectmode single -showroot 0 -yscrollcommand {.y set} 
scrollbar .y -ori vert -command ".t yview" 
pack .y -side right -fill y 
pack .t -side right -fill both -expand 1 
set columnID [.t column create -text "Column 0"] 
.t configure -treecolumn $columnID 

.t element create el1 text 
.t element create el2 rect -showfocus yes 

.t style create s1 
.t style elements s1 [list el1 el2] 

.t style layout s1 el2 -union el1 

.t configure -defaultstyle s1 

# easily add a node with text $text as a child of $parent (the root is specified by the string "root") 

proc add_node {parent text data} { 
    set itemID [.t item create -button yes ] 
    .t item element configure $itemID 0 el1 -text $text -data $data 
    .t item collapse $itemID 
    .t item lastchild $parent $itemID 
    return $itemID 
} 


set sample abcdef 
set data1 $sample 
set id1 [add_node root "This is data 1" $data1] 
set id4 [add_node root "This is data 4" $data1] 
set id5 [add_node root "This is data 5" $data1] 
set id6 [add_node root "This is data 6" $data1] 
set id7 [add_node root "This is data 7" $data1] 
set id8 [add_node root "This is data 8" $data1] 
set id9 [add_node root "This is data 9" $data1] 
set id10 [add_node root "This is data 10" $data1] 
set sample2 $id1 
set sample3 $sample2 

set dataObj [.t item element cget $sample3 0 el1 -data] 
puts "--- $dataObj" 


set dObj [Foo new] 
set id2 [add_node $id1 "This is object Foo node" $dObj] 

set dObj_1 [.t item element cget $id2 0 el1 -data] 
$dObj test $dObj_1 

在以下示例中使用值dataObj和dObj_1不僅可以在此程序中使用,也可以在包含正確包和方法調用的多個名稱空間之間使用。