C ++ / TCL如何调用tk?

时间:2011-07-05 16:35:09

标签: c++ user-interface tcl

所以我想在我的程序中输入TCL代码。我希望它能够达到我的一些C ++函数和类。所以我使用C++/TCL。所有通用的TCL到C ++绑定对我来说都很好。但现在我想在顶部有一些小的UI(所以我有很多关于与我的应用程序交互的一般TCL代码,现在我想添加Tk gui到它。)如何在窗口内创建一个简单的tk按钮,并带有一些名称我想用C ++ / TCL?我根本不想使用C ++ / TK。

更新 的 我尝试了什么:

将所有Tk(.tcl)文件放入../../tk文件夹并尝试此操作...它失败

#include <string>
#include "cpptcl.h"

int main(int argc, char *argv[])
{
    std::string script = 
        "package require Tcl 8.5\n"
        "set auto_path [linsert $auto_path 0 [file join [file dirname [info script]] ../../tk]]\n"
        "package require Tk 8.5\n";
    Tcl::interpreter tcl_interpreter;
    tcl_interpreter.eval(script);
    return 0;
}

我也试过像

这样的东西
#include <string>
#include "cpptcl.h"
int main(int argc, char *argv[])
{
    std::string script = 
        "package require Tcl 8.5\n"
        "foreach tkFile [glob -nocomplain -directory ../../tk *] {\n"
        "    source $tkFile\n"
        "}\n"
        "package require Tk 8.5\n";
    Tcl::interpreter tcl_interpreter;
    tcl_interpreter.eval(script);
    return 0;
}

哪个也失败了。

此外,我试图将tk85.dll放在我的应用附近并致电

#include <string>
#include "cpptcl.h"
int main(int argc, char *argv[])
{
    std::string script = 
        "package require Tcl 8.5\n"
        "load tk85.dll \n";
    Tcl::interpreter tcl_interpreter;
    tcl_interpreter.eval(script);
    return 0;
}

和这个

#include <string>
#include "cpptcl.h"
int main(int argc, char *argv[])
{
    std::string script = 
        "package require Tcl 8.5\n"
        "interp create slave \n"
        "load {} Tk slave \n"
    ;
    Tcl::interpreter tcl_interpreter;
    tcl_interpreter.eval(script);
    return 0;
}

here所述。这也失败了。

#include <string>
#include "cpptcl.h"

int main(int argc, char *argv[])
{
    std::string script = 
        "package require Tcl 8.5\n"
        " interp create a\n"
        " a eval {set argv {-display :0}; package require Tk; button \".b\" -text \"Say Hello\"; pack \".b\" -padx 20 -pady 6;}\n"
        ;
    Tcl::interpreter tcl_interpreter;
    tcl_interpreter.eval(script);
    std::cin.get();
    return 0;
}

编译并运行,但不会显示ani窗口或其他内容。(

怎么办?如何加载Tk?

1 个答案:

答案 0 :(得分:1)

你还没有说失败的原因,但这不会起作用。要拥有GUI,您需要一个事件循环。

我建议采用不同的方法:将C ++代码转换为可加载Tcl的模块,然后您的脚本可以在wish下运行,并使用Tk和用C ++实现的对象。