在tcl中选择表列表中的项时命令?

时间:2015-11-09 13:44:32

标签: tcl

我有一个表格列表,我想在某处显示当前所选项目的信息。就像突触的(图片)

这是我的表格列表:

tablelist::tablelist .t.frm.lbf.mlb -selectmode multiple -columns {0 "File" 0 "Name" 0 "Version" 0 "Archtectures" 0 "Summary" 0 "Type"} \
-stretch all -background white -width 57 -xscroll {.t.frm.lbf.h set} -yscroll {.t.frm.lbf.v set}  -showseparators true

因此,无论何时单击(选择)一行,它都会显示信息

enter image description here

我无法找到如何将命令绑定到项目点击(选择)。

2 个答案:

答案 0 :(得分:3)

将脚本绑定到tablelist小部件的<<TablelistSelect>>虚拟事件,并在事件处理程序中使用.tablelist curselection来检索所选索引。请确保为列添加-name属性,以便即使用户更改列顺序也可以轻松处理单元格:

.t.frm.lbf.mlb columnconfigure 0 -name file

bind .t.frm.lbf.mlb <<TablelistSelect>> [list packageSelected %W]

proc packageSelected {w} {
    # -selecttype row is the default
    foreach row [$w curselection] {
        puts [format "Package file %s selected" [$w getcells $row,file]]
    }
}

答案 1 :(得分:0)

就像我在评论中提到的那样,当你的tablelist主体中有一个点击时,你可以使用绑定[.tbl bodytag]来触发一个函数。以你的例子:

bind [.t.frm.lbf.mlb bodytag] <Button-1> {
    lassign [tablelist::convEventFields %W %x %y] w x y
    lassign [split [$w containingcell $x $y] ,] row col
    tk_messageBox -title Info -message "This is $row,$col"
}

将显示一个消息框,说明正在单击哪个表格单元格。从tablecell中,您可以获得tablerow $row。从tablerow中,您可以获取该行上任何单元格的单元格内容。

例如,在图片中,单击第一行的任意位置会使$row的值为0.您可以通过调用以下内容来获取包名:

set pkgName [lindex [lindex [.t.frm.lbf.mlb rowconfigure $row -text] 4] 2]

哪个可以获得值openoffice.org-calc,然后您可以使用它来获取要在不同小部件中显示的任何信息。

[.t.frm.lbf.mlb rowconfigure $row -text]提供了行$row的所有文字设置。

[lindex [.t.frm.lbf.mlb rowconfigure $row -text] 4]仅在tcl列表中提供该行的文本值。

[lindex [lindex [.t.frm.lbf.mlb rowconfigure $row -text] 4] 2]然后从第3列(索引2)给出文本值。