Tcl 忘记小部件后,添加“给”;已经存在';

Tcl 忘记小部件后,添加“给”;已经存在';,tcl,tk,Tcl,Tk,我希望在运行时在ttk::notebook中添加/删除选项卡。所以,我做了这个: ttk::notebook .nb proc add_tab {} { set tab_cnt [.nb index end] .nb add [frame .nb.fr$tab_cnt] } proc del_tab {} { set tab_no [expr [.nb index end] - 1] .nb forget .nb.fr$tab_no } 删除已完成,但在删除后添加新选项卡将

我希望在运行时在ttk::notebook中添加/删除选项卡。所以,我做了这个:

ttk::notebook .nb

proc add_tab {} {
  set tab_cnt [.nb index end]
  .nb add [frame .nb.fr$tab_cnt]
}

proc del_tab {} {
  set tab_no [expr [.nb index end] - 1]
  .nb forget .nb.fr$tab_no
}
删除已完成,但在删除后添加新选项卡将生成消息

window name "fr0" already exists in parent

如何正确删除选项卡和框架(或其他小部件,如果已添加到选项卡)?

当您从父容器中忘记小部件时,小部件仍然存在,并且名称仍在使用中;它只是没有显示在屏幕上,它没有映射。要释放名称以便再次使用,需要
销毁该小部件

也就是说,而不是:

.nb forget .nb.fr$tab_no
这样做:

destroy .nb.fr$tab_no

(销毁小部件也会使其容器忘记它;Tk会自动为您处理它。)

您必须感谢!这就是我想要的。