我对限制调整
text
Tk
小部件的大小有疑问。我有以下代码,其中两个 text
小部件彼此排列在一起。问题是当我调整包含“Box2”的文本小部件的大小时,它就会消失,如下图所示。
我想调整大小,以便也可以看到“Box2”。如果在调整大小的某个阶段无法显示“Box2”,则应禁止调整为较小的尺寸(但应允许调整为较大的尺寸)。
正常尺寸
调整大小
重现问题的代码是:
#----------------------------------------------
# scrolled_text from Brent Welch's book
#----------------------------------------------
proc scrolled_text { f args } {
frame $f
eval {text $f.text -wrap none \
-xscrollcommand [list $f.xscroll set] \
-yscrollcommand [list $f.yscroll set]} $args
scrollbar $f.xscroll -orient horizontal \
-command [list $f.text xview]
scrollbar $f.yscroll -orient vertical \
-command [list $f.text yview]
grid $f.text $f.yscroll -sticky news
grid $f.xscroll -sticky news
grid rowconfigure $f 0 -weight 1
grid columnconfigure $f 0 -weight 1
return $f.text
}
proc horiz_scrolled_text { f args } {
frame $f
eval {text $f.text -wrap none \
-xscrollcommand [list $f.xscroll set] } $args
scrollbar $f.xscroll -orient horizontal -command [list $f.text xview]
grid $f.text -sticky news
grid $f.xscroll -sticky news
grid rowconfigure $f 0 -weight 1
grid columnconfigure $f 0 -weight 1
return $f.text
}
set st1 [scrolled_text .t1 -width 40 -height 10]
set st2 [horiz_scrolled_text .t2 -width 40 -height 2]
pack .t1 -side top -fill both -expand true
pack .t2 -side top -fill x
$st1 insert end "Box1"
$st2 insert end "Box2"
按照 schlenk 作品的建议,使用
grid
而不是 pack
。
set st1 [scrolled_text .t1 -width 80 -height 40]
set st2 [horiz_scrolled_text .t2 -width 80 -height 2]
grid .t1 -sticky news
grid .t2 -sticky news
# row 0 - t1; row 1 - t2
grid rowconfigure . 0 -weight 10 -minsize 5
grid rowconfigure . 1 -weight 2 -minsize 1
grid columnconfigure . 0 -weight 1
$st1 insert end "Box1"
$st2 insert end "Box2"
这里的键是
rowconfigure
,权重已分配给它。我根据 10
值将 .t1
分配给 2
,将 .t2
分配给 height
。我还将 minsize
设置为 5
和 1
,这样我们就不会将窗口缩小到超过某个最小值。
columnconfigure
将 weight
设置为 1
,因为如果我们尝试水平调整大小,窗口应该扩展并填充,而不是留下空白空间。