如何实现多个列表框(TCL)TK滚动条?(How to implement tk scrollbar

2019-09-28 17:02发布

我尝试过各种的选择,但在实现简单的滚动条为两个或两个以上列表框没有成功。 下面是我的代码给错误而滚动。 我希望你们都帮我...

scrollbar .scroll -orient v
pack .scroll -side left -fill y
listbox .lis1
pack .lis1 -side left 
listbox .lis2
pack .lis2 -side left 

for {set x 0} {$x < 100} {incr x} {
 .lis1 insert end $x
 .lis2 insert end $x
}
.lis1 configure -yscrollcommand [list .scroll set]
.lis2 configure -yscrollcommand [list .scroll set]
.scroll configure -command ".lis1 yview .lis2 yview ";

感谢您。

Answer 1:

有许多的实施例上的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的滚动相同的方式(除了-xscrollcommandxview横向滚动,在滚动条方位的变化一起)。 此外, 这里的连接器,不像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}
}

一切将是相同的。



Answer 2:

如果你打算做大量的工作在回调命令 - 使一个程序来做到这一点,因为这是速度更快(程序被编译字节),不太可能引进TCL语法问题。 在这种情况下,您要执行的滚动条函数的两个Tcl命令,所以你需要使用换行或分号分隔的语句。

调用来自列表框的滚动条设置功能将只是第二个覆盖第一。 你要么需要一个函数来合并这两个或者如果列表中有相同的长度,只是把它从其中一人用滚动条设置回调滚动条的大小和位置,然后更新所有的列表框。

有一个multilistbox包的地方-尝试的Tcl维基找到例子。



Answer 3:

我知道,这个帖子确实是老了,但我最近发现我认为是一个相当简单的解决方案。 而不是使用垂直滚动条我发现我可以使用滑块控件。 随着滑块就可以得到滑块的位置,并用它来设置列表框(ES)的yview。 多个列表框可以同时滚动。 我用VTCL构建GUI这样的代码,我可以提供可能不适合使用TK WM系统管理命令这些beimmediately明显。 但这里是我使用的代码。 它被绑定到滑块运动。

set listIndex [$widget(Scale1) get]
$widget(Listbox1) yview $listIndex
$widget(Listbox2) yview $listIndex

希望这是有帮助的人。



文章来源: How to implement tk scrollbar for multiple listboxes (TCL)?
标签: windows tcl tk