首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TreeCtrl中的命令等效项

TreeCtrl中的命令等效项
EN

Stack Overflow用户
提问于 2012-10-17 11:15:32
回答 2查看 122关注 0票数 0

我已经使用Bwidget构建了一个树视图,现在我正在尝试将其转换为TreeCtrl,但我无法在TreeCtrl中为Bwidget命令找到等效的命令:

代码语言:javascript
复制
$tree itemcget $node -data
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-17 17:12:58

似乎没有任何机制可以将用户指定的数据直接附加到TkTreeCtrl中的节点。解决此问题的最简单方法是将数据存储在一个数组中,该数组由节点的ID (如果在应用程序中使用多个节点,则还包括树部件名称)进行索引。

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

我见过许多人建议将TkTreeCtrl包装在一个类中(例如,Snit、TclOO、XOTcl),以使其在特定情况下更易于使用。这是一种很好的包装…的东西

票数 1
EN

Stack Overflow用户

发布于 2012-10-22 17:55:11

关于这个问题,我的项目负责人提出了一个非常简单的解决方案,用于将用户指定的数据附加到Treectrl节点,

您可以创建嵌入了数据的节点

代码语言:javascript
复制
$tree item element configure $itemID $columnID elemText -text $text -data $data

然后,当您想要将数据用于任何目的时

代码语言:javascript
复制
set dataObj [$tree item element cget $itemID $columnID elemText -data]

现在数据保存在dataObj中,您可以使用它进行任何操作,操作,它为我提供了Bwidget tree命令的确切功能-

代码语言:javascript
复制
$tree itemcget $node -data ------> which i thought was not directly possible in TreeCtrl.

我将在下面发布一个示例程序,供您试用,并对格式表示抱歉:

代码语言:javascript
复制
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不仅可以在此程序内使用,而且可以在正确包含包和方法调用的多个命名空间之间使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12926573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档