繁体   English   中英

C++/TCL如何调用tk?

[英]C++/TCL how to invoke tk?

所以我想在我的程序中执行 TCL 代码。 我希望它能够访问我的一些 C++ 函数和类。 所以我使用C++/TCL 所有通用 TCL 到 C++ 绑定对我来说都很好。 但是现在我想在上面有一些小 UI(所以我有很多与我的应用程序交互的通用 TCL 代码,现在我想向它添加 Tk gui。)如何在 window 内部创建简单的 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;
}

如此所述。 这也失败了。

这个

#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 window 或其他。(

该怎么办? 如何加载 Tk?

你还没有说什么失败了,但这行不通。 要拥有 GUI,您需要一个事件循环。

我推荐一种不同的方法:将您的 C++ 代码放入 Tcl 可加载模块中,然后您的脚本可以在wish下运行并使用 Tk 和在 C++ 中实现的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM