[ltk-user] How to configure widgets?
Josef Wolf
jw at raven.inka.de
Mon Nov 19 16:29:16 UTC 2012
Hello everybody,
I am trying to make my first steps with ltk, and I have problems to
reconfigure existing widgets. Here is an example where I try to reconfigure
the :TEXT attribute of the LABEL-WIDGET widget whenever the checkbox of the
CHECK-BUTTON-WIDGET widget is clicked.
(with-ltk ()
(setf *debug-tk* t)
(let* ((f (make-instance 'frame))
(label-widget (make-instance 'label
:master f
:text "initial text"))
(check-button-widget (make-instance 'check-button
:master f
:text "check me"
:command (lambda (val)
(configure label-widget :text val)))))
(pack f)
(pack label-widget :side :left)
(pack check-button-widget :side :left)
(configure f :borderwidth 3)
(configure f :relief :sunken)))
When I click on the checkbox, the col.or of the checkbox changes and I can see
in the debug output something like this:
process_buffer
l:(:CALLBACK "we" 1)<=
buffer size 27
bt ".wc.wd configure -text {1}"
process_buffer
l:(:CALLBACK "we" 0)<=
buffer size 27
bt ".wc.wd configure -text {0}"
So I assume, the callback is executed properly. But the diplayed text of
LABEL-WIDGET is not changed at all.
I have tried to use "text" and 'text instead of :text, but none of those seems
to make any difference.
This is on opensuse-12.1 with tk-8.5 and I use LTK-0.98, as it bundled with
the newest quicklisp distro.
Any ideas what I am missing here? Here is the complete debug output of LTK:
; compiling (WITH-LTK NIL ...)buffer size 19
bt "package require Tk"
process_buffer
add-callback (we #<CLOSURE (LAMBDA (VAL)
:IN
"/lisp/ltk-test.lisp")
{C1D9FA5}>)
buffer size 3519
bt "if {\[catch {package require Ttk} err\]} {tk_messageBox -icon error -type
ok -message \"\$err\"}"
bt "proc debug { msg } {
global server
puts \$server \"(:debug \\\"\[escape \$msg\]\\\")\"
flush \$server
} "
bt "proc escape {s} {regsub -all {\\\\} \$s {\\\\\\\\} s1;regsub -all {\"}
\$s1 {\\\"} s2;return \$s2}"
bt "proc senddata {s} {global server; puts \$server \"(:data \[escape
\$s\])\";flush \$server}"
bt "proc senddatastring {s} {
global server
puts \$server \"(:data \\\"\[escape \$s\]\\\")\"
flush \$server
} "
bt "proc senddatastrings {strings} {
global server
puts \$server \"(:data (\"
foreach s \$strings {
puts \$server \"\\\"\[escape \$s\]\\\"\"
}
puts \$server \"))\";flush \$server} "
bt "proc to_keyword {s} {
if {\[string index \$s 0\] == \"-\"} {
return \":\[string range \$s 1 \[string length \$s\]\]\" }
{return \":\$s\"}}"
bt "proc sendpropertylist {l} {
global server;
set pos 0
set ll \[llength \$l\]
puts \$server \"(:data (\"
while {\$pos < \$ll} {
puts \$server \" \[to_keyword \[lindex \$l \$pos\]\] \"
set pos \[expr \$pos + 1\]
puts \$server \" \[lindex \$l \$pos\] \"
set pos \[expr \$pos + 1\]
}
puts \$server \"))\"
}"
bt "proc searchall {widget pattern} {
set l \[string length \$pattern\]
set result \[\$widget search \$pattern 1.0\]
set previous 0
while {\$result > \$previous} {
\$widget tag add sel \$result \$result+\${l}chars
set previous \$result
set result \[\$widget search \$pattern
\$result+\${l}chars\]
}
}"
bt "proc searchnext {widget pattern} {
set l \[string length \$pattern\]
set result \[\$widget search \$pattern insert\]
if {\$result > 0} {
\$widget tag remove sel 1.0 end
\$widget tag add sel \$result \$result+\${l}chars
\$widget mark set insert \$result+\${l}chars
\$widget see insert
}
}"
bt "proc resetScroll {c} {
\$c configure -scrollregion \[\$c bbox all\]
}
proc moveToStart {sb} {
set range \[\$sb get\]
\$sb set 0 \[expr \[lindex \$range 1\] - \[lindex \$range 0\]\]
}
"
bt "proc sendevent {s x y keycode char width height root_x root_y
mouse_button} {global server; puts \$server \"(:event \\\"\$s\\\" \$x \$y
\$keycode \$char \$width \$height \$root_x \$root_y \$mouse_button)\";
flush \$server} "
bt "proc callback {s} {global server; puts \$server \"(:callback
\\\"\$s\\\")\";flush \$server} "
bt "proc callbackval {s val} {global server; puts \$server \"(:callback
\\\"\$s\\\" \$val)\"} "
bt "proc callbackstring {s val} {global server; puts \$server \"(:callback
\\\"\$s\\\" \\\"\[escape \$val\]\\\")\"} "
bt "proc keepalive {} {global server; puts \$server \"(:keepalive \\\"\[clock
format \[clock seconds\] -format \"%d/%m/%y %T\"\]\\\")\"; flush \$server}"
bt "global text_wd ; set text_wd \"initial text\""
bt "global text_we ; set text_we \"check me\""
bt "ttk::frame .wc "
bt "ttk::checkbutton .wc.we -command {callbackval we \$we} -textvariable
text_we"
bt ".wc.we configure -variable we ; global we ; set we {}"
bt "pack .wc -side top -fill none"
bt "ttk::label .wc.wd -textvariable text_wd"
bt "pack .wc.wd -side left -fill none"
bt "pack .wc.we -side left -fill none"
bt ".wc configure -borderwidth {3}"
bt ".wc configure -relief {sunken}"
bt ".wc.wd configure -text {x}"
process_buffer
l:(:CALLBACK "we" 1)<=
buffer size 27
bt ".wc.wd configure -text {1}"
process_buffer
l:(:CALLBACK "we" 0)<=
buffer size 27
bt ".wc.wd configure -text {0}"
process_buffer
Closing wish stream: #<TWO-WAY-STREAM
:INPUT-STREAM #<SB-SYS:FD-STREAM for "descriptor 9"
{C11D111}>
:OUTPUT-STREAM #<SB-SYS:FD-STREAM
for "descriptor 8" {C11D4C9}>>
More information about the ltk-user
mailing list