-Q2.F.3- create a scrollable window of buttons?
From: -II- Tk Questions and Answers - How can I:
A2.F.3. There are at least two ways to do this. First, there is a hypertext
widget that one can get from the Tcl User Contributed Code Archive -
(See tcl-faq/part4) and (See tcl-faq/part5) for details -
which provides such a facility.
And here is some sample code from
"Michael Moore" <mdm@stegosaur.cis.ohio-state.edu> which shows a way to
do this using just Tk.
#! /bin/wish -f
#
# This demonstrates how to create a scrollable canvas with multiple
# buttons.
#
# Author : Michael Moore
# Date : November 17, 1992
#
#
# This procedure obtains all the items with the tag "active"
# and prints out their ids.
proc multi_action {} {
set list [.frame.canvas find withtag "active"]
puts stdout "Active Item Ids : "
foreach item $list {
puts stdout $item
}
}
#
# This simulates the toggling of a command button...
# Note that it only works on a color display as is right now
# but the principle is the same for b&w screens.
#
proc multi_activate {num id} {
set tags [.frame.canvas gettags $id]
if {[lsearch $tags "active"] != -1} {
.frame.canvas dtag $id "active"
.frame.canvas.button$num configure \
-background "#060" \
-activebackground "#080"
} else {
.frame.canvas addtag "active" withtag $id
.frame.canvas.button$num configure \
-background "#600" \
-activebackground "#800"
}
}
proc setup {} {
frame .frame
scrollbar .frame.scroll \
-command ".frame.canvas yview" \
-relief raised
canvas .frame.canvas \
-yscroll ".frame.scroll set" \
-scrollregion {0 0 0 650} \
-relief raised \
-confine false \
-scrollincrement 25
pack append .frame \
.frame.scroll {left frame center filly} \
.frame.canvas {left frame center fillx filly}
pack append .\
.frame {left frame center fillx filly}
button .frame.canvas.action \
-relief raised \
-text "Action" \
-command "multi_action"
.frame.canvas create window 1 25 \
-anchor w \
-window .frame.canvas.action
for {set i 2} {$i < 26} {incr i} {
button .frame.canvas.button$i \
-relief raised \
-background "#060" \
-foreground wheat \
-activebackground "#080" \
-activeforeground wheat \
-text "Button $i"
set id [.frame.canvas create window 1 [expr $i*25] \
-anchor w \
-window .frame.canvas.button$i]
.frame.canvas.button$i configure \
-command "multi_activate $i $id"
}
}
setup
Parent document is top of "FAQ: comp.lang.tcl Tk Toolkit Usage Questions And Answers (1/1)"
Previous document is "-Q2.F.2- get -relief to work on my text widgets?"
Next document is "-Q2.F.4- pack a text widget so that it can be resized interactively?"