如何在没有编辑状态的情况下选择Tktable中的单元格?

时间:2017-11-16 09:44:18

标签: tcl tk

我正在使用Tktable包绘制表格,例如:

package require Tktable
global TableValue
array set TableValue {
    0,1 Col1 0,2 Col2 1,0 Row1 2,0 Row2 1,1 a 1,2 b 2,1 c 2,2 d 
}
table .t -rows 3 -cols 3 -titlerows 1 -titlecols 1 -variable TableValue
pack .t

当我单击单元格时,如何只显示单元格选择状态而不是编辑状态我可以使用“删除”清除单元格内容,如果我双击单元格则显示编辑状态。如何实现?谢谢!

1 个答案:

答案 0 :(得分:0)

使用表格小部件可以实现的最大视觉控制可能是通过在表格中嵌入小部件来完成的。这是因为该表具有难以覆盖您的规范的默认绑定。但是你可以插入如下图所示的小部件,并完全控制它们的外观。随意使用属性和绑定。但这应该是一个公平的开始。

package require Tktable

array set TableTitles {
    0,1 Col1 0,2 Col2 1,0 Row1 2,0 Row2, 1,1 a 1,2 b 2,1 c 2,2 d
}


table .t -rows 3 -cols 3 -titlerows 1 -titlecols 1 -variable TableTitles
pack .t

proc EnableEntry { entry } {
    $entry configure -state normal -cursor ibeam
    $entry selection range 0 end
}

foreach row [list 1 2] {
    foreach col [list 1 2] {
        set cell [set row],[set col]
        # Use the array already created for the entry variable
        set entry [entry .t.e$row$col -justify center -textvariable TableTitles($cell) \
            -highlightthickness 1 -highlightcolor blue -state disabled \
            -disabledbackground white -disabledforeground black -cursor arrow]

        bind $entry <Double-Button-1> "EnableEntry $entry"
        bind $entry <Button-1> "focus $entry"
        bind $entry <FocusOut> "$entry configure -state disabled -cursor arrow"
        .t window configure $cell -window $entry
    }
}