簡體   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