-Q2.E.5- scroll a canvas an a listbox at the same time with one scrollbar?
From: -II- Tk Questions and Answers - How can I:
A2.E.5. From "David Herron" <david@twg.com>:
You need to write different code to handle the scrollcommand's. Look at the
man page for `scrollbar' (and `listbox') and you see that it appends some
numbers to the scrollcommand such that your scrollbar command is executed as:
.f.c yview; .f.lb yview <offset>
What I ended up doing is appended. This code has an advantage in that
scrolling is constrained to "look right".
listbox .l1 -relief sunken -yscrollcommand {
scrollMultiple_y { .l1 .l2 .l3 } .vs
}
listbox .l2 -relief sunken -yscrollcommand {
scrollMultiple_y { .l1 .l2 .l3 } .vs
}
listbox .l3 -relief sunken -yscrollcommand {
scrollMultiple_y { .l1 .l2 .l3 } .vs
}
scrollbar .vs -relief sunken -orient vertical \
-command {setMultiple_y {.l1 .l2 .l3}}
bind .l1 <1> {
selectMultiple {.l1 .l2 .l3} [%W nearest %y]
}
bind .l1 <B1-Motion> {
selectMultiple {.l1 .l2 .l3} [%W nearest %y]
}
bind .l1 <Shift-1> {
selectMultiple {.l1 .l2 .l3} [%W nearest %y]
}
bind .l1 <Shift-B1-Motion> {
selectMultiple {.l1 .l2 .l3} [%W nearest %y]
}
bind .l2 <1> {
selectMultiple {.l1 .l2 .l3} [%W nearest %y]
}
bind .l2 <B1-Motion> {
selectMultiple {.l1 .l2 .l3} [%W nearest %y]
}
bind .l2 <Shift-1> {
selectMultiple {.l1 .l2 .l3} [%W nearest %y]
}
bind .l2 <Shift-B1-Motion> {
selectMultiple {.l1 .l2 .l3} [%W nearest %y]
}
bind .l3 <1> {
selectMultiple {.l1 .l2 .l3} [%W nearest %y]
}
bind .l3 <B1-Motion> {
selectMultiple {.l1 .l2 .l3} [%W nearest %y]
}
bind .l3 <Shift-1> {
selectMultiple {.l1 .l2 .l3} [%W nearest %y]
}
bind .l3 <Shift-B1-Motion> {
selectMultiple {.l1 .l2 .l3} [%W nearest %y]
}
proc scrollMultiple_y {lists vs total window first last} {
if {[expr $first+$window] > $total} {
set first [expr $total-$window]
set last [expr $first+$window]
}
setMultiple_y $lists $first
$vs set $total $window $first $last
}
proc setMultiple_y {lists index} {
foreach l $lists { $l yview $index }
}
proc selectMultiple {lists index} {
foreach l $lists { $l select from $index }
}
Parent document is top of "FAQ: comp.lang.tcl Tk Toolkit Usage Questions And Answers (1/1)"
Previous document is "-Q2.E.4- detect when the canvas has been resized?"
Next document is "-Q2.E.6- use a list of coordinates in a variable to create a polygon (or any other item)?"