我有一组radiobuttons
(例如,选择1和2),需要根据用户的选择显示一些小部件。例如,如果他们选择1,我会向他们展示一个labelframe
,其中包含多个radiobuttons
;然而,如果他们选择了2,我会向他们展示一个labelframe
,其中有一些buttons
。在任何一种情况下,结果内容都将显示在窗口的同一区域中。
在这样的多个小部件显示之间切换的好方法是什么?
This answer我认为我应该使用panedwindow
和frames
,但我不太清楚如何在不同内容之间切换。
答案 0 :(得分:3)
使用panedwindow时,您应该可以通过删除框架并添加新框架来替换内容窗格。有关ttk :: panedwindow的forget
和add
/ insert
命令的说明,请参阅this manual page。
示例代码:
package require Ttk
# Create a panedwindow
ttk::frame .f
ttk::panedwindow .f.pane -orient vertical
# Create three panes
ttk::frame .f.pane.one -height 50 -width 50
ttk::label .f.pane.one.l -text "Number one"
pack .f.pane.one.l
ttk::frame .f.pane.two -height 50 -width 50
ttk::label .f.pane.two.l -text "Number two"
pack .f.pane.two.l
ttk::frame .f.pane.three -height 50 -width 50
ttk::label .f.pane.three.l -text "Number three"
pack .f.pane.three.l
# Add frames one and two to the panedwindow
.f.pane add .f.pane.one
.f.pane add .f.pane.two
pack .f.pane -expand 1 -fill both
pack .f -expand 1 -fill both
# Replace pane one with pane three
.f.pane insert 1 .f.pane.three
.f.pane forget 2
您可以根据自己的需要调整此代码。只需创建您可能需要的所有视图,然后根据需要交换它们。
答案 1 :(得分:1)
一种非常简单的方法是为每组数据使用一个帧。使用grid
将它们全部放在同一行和列中。然后你需要做的就是将框架和它的子项提升到堆叠顺序的顶部。
另一种技术开始时相同,但不是使用加注,而是在当前显示的任何帧上执行grid remove
,然后在要显示的帧上grid
。使用grid remove
时,grid
会记住所有设置,这样您就无需在下次要显示时再次指定所有选项。