如何将TkCon(或其他Tk控制台)嵌入到窗口小部件中?

时间:2011-03-02 01:37:11

标签: tcl tk

我想创建一个Tcl / Tk应用程序 - 主要是 - 传统的菜单和按钮直接操作工具,其中大部分交互是通过在Tcl / Tk中实现的图形界面。

但是,对于某些高级用途(和调试),我想在主窗口中有一个小部件(子窗口),其中包含一个Tk控制台,我可以在其中键入命令,查看输出,以及控制应用程序。

启动TkCon(或愿望)并获得一个顶级窗口似乎很容易,然后在单独的顶级窗口中创建我的应用程序界面。应用程序将以这种方式正常工作,但我希望这两个窗口可以是相同布局的一部分,一起移动,支持调整大小等。

使用TkCon有一种简单的方法吗?

我还希望TkCon窗口能够显示从我的应用程序中冒出的消息(例如,调试输出)。一些消息将由Tcl代码生成;其他人通过C代码构成我的应用程序的一部分。我不需要捕获stdout - 我愿意调用一个特殊用途的函数来传递消息 - 但是不清楚是什么才能使它们像这样显示最有效的方法。

3 个答案:

答案 0 :(得分:1)

对于tkcon,请参阅Donal的回答。但是我会补充一点,你可以嵌入在Windows上使用的Tk内置控制台。此脚本在非Windows上可用,并且可以嵌入到选项卡式笔记本页面中。 有关此示例,请参阅tkchat_console.tcl - 该文件加载Tk console.tcl文件,底部的:: tkchat :: EmbeddedConsoleDemo函数显示如何使用它。

答案 1 :(得分:1)

以下代码适用于我:

set f [labelframe $p.console -text "Interactive:"]
frame $f.test -container 1
namespace eval ::tkcon {
    set OPT(exec) {}
    set PRIV(root) .tkcon
    set embed_args {}
}
option add *tkcon.Use [winfo id $f.test] interactive
package require tkcon
tkcon::Init

此代码通过" X11选项"对tkcon toplevel的addse -use选项。 :: tkcon :: embed_args也很重要。

答案 2 :(得分:0)

阅读documentation我只看到让它正式正式作为自己的顶层窗口的方法。 (特别是,tkcon new没有任何论据......)所以我们正在谈论一个黑客来获得你想要的东西。

如果你有Tk 8.6并且不在OSX上(或者在该平台上使用基于X11的版本),你可以将顶层变形为wm forget的框架并以这种方式嵌入,但是我不知道在这种情况下是否会对小部件名称缺乏控制权。

否则,如果你有BLT可用,我相信它有能力重新显示小部件。我从来没有尝试这样做,所以这是传闻,但它可能能够在另一个小部件中放置一个顶层。

越来越hacky,您可以编辑tkcon源,以便为其创建的顶层指定-use选项。这会让你把它放在另一个小部件中(打开-container选项的框架;你也必须把它与winfo id拼凑在一起)但是再次,它有点复杂而且我不喜欢知道这样做的后果是什么在你的平台上。这应该适用于旧版本的Tk(它是Tcl / Tk浏览器插件运行方式的基础)。