【发布时间】:2012-05-21 18:36:14
【问题描述】:
我是 tcl/tk 的新手,需要在 cadence 的遭遇中运行一个脚本。为此,我在提供的解释器中获取我的文件并调用我的函数。在第一次运行时,它工作正常。但是,一旦我关闭使用 Tk 创建的主窗口并尝试重新运行我的方法,它就会告诉我它无法调用 wm 命令,因为应用程序已被破坏。如何在不重新启动 tcl 解释器的情况下重新运行脚本?
【问题讨论】:
我是 tcl/tk 的新手,需要在 cadence 的遭遇中运行一个脚本。为此,我在提供的解释器中获取我的文件并调用我的函数。在第一次运行时,它工作正常。但是,一旦我关闭使用 Tk 创建的主窗口并尝试重新运行我的方法,它就会告诉我它无法调用 wm 命令,因为应用程序已被破坏。如何在不重新启动 tcl 解释器的情况下重新运行脚本?
【问题讨论】:
关闭主窗口是问题所在,它将 Tk 置于不可恢复状态,只能退出。
尝试绑定到 WM_DELETE 消息,然后隐藏/图标化主窗口 '.'或使用额外的顶层窗口而不是默认的“。”窗口。
根据您的脚本,您可能需要做更多的事情,因为某些小部件/名称在运行两次时可能已经存在。
【讨论】:
. 并且永远不要使用它。那会很好的。请记住让您的实际退出应用程序的逻辑正确。 :-)
我曾经使用过类似的东西,暴露在调试菜单中:(警告未测试!)
proc Restart {} {
foreach w [winfo children .] {
destroy $w
}
source [info script]
}
它(希望)销毁所有子小部件,然后通过资源脚本重新创建它们,假设这是当前脚本所做的。
但这将取决于您如何按照 schlenk 的建议首先构建您的窗户
【讨论】: