Tcler の wikiに多数の例がありますが、中心的な原則は、スクロール プロトコルがウィジェット間で確実に同期されるようにするための手順を使用することです。そのwikiページに基づいた例を次に示します。
# Some data to scroll through
set ::items [lrepeat 10 {*}"The quick brown fox jumps over the lazy dog."]
# Some widgets that will scroll together
listbox .list1 -listvar ::items -yscrollcommand {setScroll .scroll}
listbox .list2 -listvar ::items -yscrollcommand {setScroll .scroll}
scrollbar .scroll -orient vertical -command {synchScroll {.list1 .list2} yview}
# The connectors
proc setScroll {s args} {
$s set {*}$args
{*}[$s cget -command] moveto [lindex [$s get] 0]
}
proc synchScroll {widgets args} {
foreach w $widgets {$w {*}$args}
}
# Put the GUI together
pack .list1 .scroll .list2 -side left -fill y
他のスクロール可能なウィジェットをこのスキームにプラグインすることもできることに注意してください。Tk のすべてが同じ方法でスクロールします (スクロールバーの向きの変更を伴う水平スクロール-xscrollcommand
を除く)。xview
さらに、ここのコネクタは、wiki ページのコネクタとは異なり、スクロールされたウィジェットの複数のグループで一度に使用できます。一緒にスクロールされる内容の知識は-command
、スクロールバーのオプション (コールバックの最初の引数synchScroll
) に格納されます。
[編集]: 8.4 以前では、わずかに異なるコネクタ手順が必要です。
# The connectors
proc setScroll {s args} {
eval [list $s set] $args
eval [$s cget -command] [list moveto [lindex [$s get] 0]]
}
proc synchScroll {widgets args} {
foreach w $widgets {eval [list $w] $args}
}
他のすべては同じになります。