滚动条配合列表组件,文本框组件等能改变组件的外观,浏览组件中超出显示范围的内容.
移动单个的组件
- 用户调用滚动操作时,滚动条利用自己的-command选项来通知关联组件(文本框),同时组件在调整自己外观时利用自己的-yscrollcommand选项通知滚动条,滚动条会更新它的显示状态.如果不用-yscrollcommand通知滚动条,滚动条会是一个长长的长条,不会变.
- 所以滚动条的实现是一个双向的过程.
下面的代码实现了一个滚动条和文本框
my $text = $mw->new_text(-width => 80, -height => 15, -wrap => "none");
$text->g_grid(-column => 0, -row => 0, -sticky => "news");
my $sc = $mw->new_scrollbar(-orient => "v", -command => [$text, "yview"]); ## 滚动条指向组件
$sc->g_grid(-column => 1, -row => 0, -sticky => "ns",);
$text->configure(-yscrollcommand => [$sc, "set"],); ## 组件通知滚动条
移动两个到多个组件
前面的滚动条只能控制一个文本框.但是现在需要为文本框增加显示行号功能,同时拖动滚动条时,行号随着文本框的上下移动而移动.
- 首先需要两个文本框,一个用来显示行号,一个用来显示文本.
- 用一个滚动条绑定两个文本框,当拖动滚动条时,行号和文本两个组件都将随着滚动条移动.
- 行号框能(不能)控制滚动条的状态变化.
- 文本框作为主窗口,必须要通知滚动条,去更新滚动条状态
tcl代码示例
可以根据tcl代码改编成python\perl代码
#!/usr/bin/tcl
foreach n {
0 1 2 3 4 5 6 7 8 9 a b c d e f g h} { lappend list1 item1-$n }
foreach n {
0 1 2 3 4 5 6 7 8 9 a b c d e f g h} { lappend list2 item2-$n }
frame .f -relief sunken -bd 2 -highlightt 0
listbox