什么是动态显示不同内容的好方法(在Tcl / Tk中)?

时间:2010-09-03 19:59:47

标签: tcl tk

我有一组radiobuttons(例如,选择1和2),需要根据用户的选择显示一些小部件。例如,如果他们选择1,我会向他们展示一个labelframe,其中包含多个radiobuttons;然而,如果他们选择了2,我会向他们展示一个labelframe,其中有一些buttons。在任何一种情况下,结果内容都将显示在窗口的同一区域中。

在这样的多个小部件显示之间切换的好方法是什么?

This answer我认为我应该使用panedwindowframes,但我不太清楚如何在不同内容之间切换。

2 个答案:

答案 0 :(得分:3)

使用panedwindow时,您应该可以通过删除框架并添加新框架来替换内容窗格。有关ttk :: panedwindow的forgetadd / 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会记住所有设置,这样您就无需在下次要显示时再次指定所有选项。