2012-05-21 54 views
1

我是tcl/tk的新手,需要在节奏遇到时运行脚本。为此,我在提供的解释器中输入我的文件并调用我的函数。在第一次运行它工作正常。但是,一旦我关闭了我用Tk创建的主窗口,并尝试重新运行我的方法,它告诉我它不能调用wm命令,因为应用程序已被销毁。如何在不重新启动tcl解释器的情况下重新运行脚本?tcl tk重新运行应用程序而不重新启动解释器

回答

4

关闭主窗口是问题,它将Tk置于不可恢复的状态,只能由退出。

尝试绑定到WM_DELETE消息,并隐藏/图标化主窗口'。'。或者使用额外的顶层窗口而不是默认的'。'。窗口。

根据您的脚本,您可能需要做更多的事情,因为在运行两次时某些小部件/名称可能已经存在。

+0

你如何建立你的窗户在第一个地方是在那里建立一个childinterpreter和内运行的可能性?所以我去创建孩子翻译,运行,删除孩子?在阅读Tk无法恢复之后,我希望它是这样的解决方案。我需要关于这个想法的一些指导,目前它抱怨(在儿童解释器中)找不到包Tk,父解释器不会抱怨并且运行良好。 – ted

+0

@ted,是的,您可以创建子interp。 – kostix

+0

儿童翻译可能会有所帮助,但如果主顶层已被破坏,则重新载入Tk并不能帮助您。 – schlenk

1

我用这样的事情,暴露在调试菜单:(警告!未测试)

proc Restart {} { 
    foreach w [winfo children .] { 
     destroy $w 
    } 
    source [info script] 
} 

其中(希望)销毁所有的子部件,然后通过提供资源脚本重新创建它们,假设这是当前脚本的作用。

,但是这将取决于作为舒伦克表明

相关问题