**Summary**
[EKB] I needed to have a properly editable table cell in TkTable. <
>
But I still wanted the arrow keys to work for table navigation under normal circumstances.
I added some bindings so that either a double mouse click or pressing ctrl-enter
will pop up an edit widget in the active cell.
(If you don't need the arrow keys for table navigation,
then the [Simple Tktable] widget might be what you want.)
**Code**
Here is the basic code:
----
======tcl
event add <>
event add <>
bind $table.t <> {
# Make sure the cell is up-to-date, first
forceupdate %W
# Create an edit widget
if [winfo exists %W.entry] {
saveEntry %W
destroy %W.entry
}
set row [%W index active row]
set col [%W index active col]
entry %W.entry -validate key -vcmd "validate %W %%P"
bind %W.entry {killEntry %W}
bind %W.entry {saveEntry %W; killEntry %W; forceupdate %W}
bind %W.entry {saveEntry %W; killEntry %W; forceupdate %W}
%W window configure "$row,$col" -window %W.entry -sticky news
%W.entry insert end [%W get $row,$col]
%W.entry selection range 0 end
focus %W.entry
break
}
# To work, it needs some application-specific procs (w is the table widget):
proc forceupdate {w} {
# ... Update any data structure with the cell contents
}
proc killEntry {w} {
# ... Get rid of the entry widget
}
proc validate {w s} {
# ... Pass the validate command to the entry widget
}
proc saveEntry{w} {
# ... Take the contents of the entry widget and store in the table cell
}
======
----
**Comments**
(Why did I make some of the proc names camel case and some not? Sigh...
I try to be consistent, but often miss.)
----
Why do you need an entry for tktable? Why not just use the built-in cells?
[AMG]: Eric wanted to have the cells editable only after a special binding triggers.
[EKB] Thanks AMG! Yes, and also because [TkTable] makes it hard to edit,
since the arrow key bindings are set to navigate the table.
----
[WHD] Is there any way to make this check whether the current cell's state
is "normal" or "disabled", and edit only if it is "normal"?
This is really a question about the Tktable widget; a cell's state derives from the tags it has,
and I can't even see any easy way to determine what tags a cell has.
<> GUI | Widget