tk/scrolled-frame
先看一个scrolled canvas的实现
proc scrolled w {
set pa [set pa0 [winfo parent $w]]
if {$pa eq "."} {set pa ""}
grid $w [scrollbar $pa.y -command "$w yview"] -sticky news
$w configure -xscrollcommand "$pa.x set" -yscrollcommand "$pa.y set"
grid $pa.y -sticky ns
grid [scrollbar $pa.x -ori hori -command "$w xview"] -sticky ew
grid columnconfigure $pa0 0 -weight 1
grid rowconfigure $pa0 0 -weight 1
}
canvas .c -background beige
.c create line 10 10 1000 1000
.c configure -scrollregion [.c bbox all]
scrolled .c
总结一下关键点:
- 利用grid布局管理器管理进行布局
- 利用canvas的
xview
和yview
命令实现canvas的滚动 - 利用canvas的
-xscrollcommand
和-yscrollcommand
和滚动条进行同步
遗憾的是,scrolled frame却不能简单地套用方法。因为frame自身不支持xview
和yview
这样的命令。
Create a Scrolled Frame
如果一个frame组件可以支持xview
和yview
,就可以用类似于上面scrolled canvas的方法。
所谓的scrolled,实际上是指frame的size大于可见区域时只显示其中一部分。这要求frame在布局时要能够放置在可见区域之外。能满足这一点的最合适的内置布局管理器是place
。
Leverage Canvas
TODO
Other Resource
TODO