我已經建造一個樹vieew使用Bwidgets,現在我想將其轉換爲TREECTRL,但我無法在TREECTRL找出相應的命令爲Bwidget命令:等效命令在TREECTRL
$tree itemcget $node -data
我已經建造一個樹vieew使用Bwidgets,現在我想將其轉換爲TREECTRL,但我無法在TREECTRL找出相應的命令爲Bwidget命令:等效命令在TREECTRL
$tree itemcget $node -data
有似乎沒有任何將用戶指定的數據直接附加到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),以更簡單地在特定情況下使用。這是哪門子的,將是很好的包裹的東西...
關於問題,我的項目負責人出來與用戶指定的數據附加到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不僅可以在此程序中使用,也可以在包含正確包和方法調用的多個名稱空間之間使用。
非常感謝Mr.Fellows,會試用 – NANDAGOPAL
先生,我在下面發佈了我使用的解決方案,但是我無法得到它是如何工作的概念,是否有可能發佈爲什麼你認爲它工作。 – NANDAGOPAL