我正在创建一个Tk toplevel窗口,其中包含许多不适合单个屏幕的小部件,所以我决定在窗口中添加一个垂直滚动条。我的GUI的基础是顶层窗口$ w和框架$ w.baseframe。
当我发现Tk中的帧无法滚动且我也无法使用BWidgets滚动帧时,我决定使用可滚动的Text小部件$ w.text而不是我的$ w.baseframe帧。我把所有的孩子小工具放进去,并添加了一个垂直滚动条,如下所示:
text $w.frame -yscrollcommand {$w.scrollbar set}
scrollbar $w.scrollbar -command {$w.text yview}
<here I set all my other widgets>
<here I pack all my other widgets into the $w.text>
pack $w.scrollbar -side right -fill y
pack $w.frame -side left -fill both -expand 1
当我运行脚本时,所有小部件都在Text小部件中正确显示,我可以看到窗口右侧的垂直滚动条,但滚动条会执行任何操作,它会向上或向下滚动一半我的小部件是不可见的,因为顶层窗口太高了。
感谢您的建议!
修改
这是我的代码的一个非常简化的版本。我在一列中添加了200个按钮。当我运行thius代码时,我看到一个从屏幕顶部到底部的顶层窗口,我看到右侧有一个滚动条,但它无效。
set w .testwindow
catch {destroy $w}
toplevel $w
wm title $w "title"
text $w.text -yscrollcommand {$w.scrollbar set}
scrollbar $w.scrollbar -command {$w.text yview}
for {set i 0} {$i < 200} {incr i} {
frame $w.text.$i
}
for {set i 0} {$i < 200} {incr i} {
button $w.text.$i.btn -text "btn $i"
pack $w.text.$i.btn
}
for {set i 0} {$i < 200} {incr i} {
pack $w.text.$i
}
pack $w.scrollbar -side right -fill y
pack $w.text -side left -fill both -expand 1
答案 0 :(得分:1)
它应该运行正常,但我认为您忘记更改一些变量的名称,例如,您的文本小部件名为$w.frame
,因此您的滚动条应设置为此而不是{{1 }}:
$w.text
当我使用此修改后的行运行上述内容时,它对我来说很好。
编辑:
这是一个类似的文本小部件,其中包含按钮:
scrollbar $w.scrollbar -command {$w.frame yview}
请注意,我使用的是set w .testwindow
catch {destroy $w}
toplevel $w
wm title $w "title"
text $w.text -yscrollcommand {$w.scrollbar set}
scrollbar $w.scrollbar -command {$w.text yview}
for {set i 0} {$i < 200} {incr i} {
$w.text window create end \
-create "button %W.click$i -text \"btn $i\" \
-command {do stuff}"
$w.text insert end "\n"
}
pack $w.scrollbar -side right -fill y
pack $w.text -side left -fill both -expand 1
,它特定于文本小部件,并允许在文本小部件中嵌入各种其他小部件。
另外,如果您没有使用&#39;外部&#39;在示例中,变量如$w.text window create
,大括号将避免这些反斜杠:
$i