忘记小部件后添加“已存在”

时间:2016-01-12 13:14:23

标签: 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
}

已完成删除,但删除后添加新标签会生成消息

window name "fr0" already exists in parent

如何正确删除制表符和框架(或其他窗口小部件,如果它已添加到选项卡中)?

1 个答案:

答案 0 :(得分:1)

当您从其父容器中forget窗口小部件时,窗口小部件仍然存在且名称仍在使用中;它只是没有出现在屏幕上,它不是映射。要释放名称以便再次使用,您需要destroy小部件。

即代替:

.nb forget .nb.fr$tab_no

这样做:

destroy .nb.fr$tab_no

(销毁小部件会使其容器忘记它;这是由Tk自动处理的。)