我有一个表格列表,我想在某处显示当前所选项目的信息。就像突触的(图片)
这是我的表格列表:
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
因此,无论何时单击(选择)一行,它都会显示信息
我无法找到如何将命令绑定到项目点击(选择)。
答案 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)给出文本值。