C ++ / TCL, как вызвать тк? - PullRequest
1 голос
/ 05 июля 2011

Итак, я хочу выполнить код TCL внутри моей программы. Я хочу, чтобы он был в состоянии достичь некоторых из моих функций и классов C ++. Поэтому я использую C ++ / TCL . Все общие привязки TCL к C ++ прекрасно работают для меня. Но теперь я хочу, чтобы наверху был какой-то небольшой пользовательский интерфейс (поэтому у меня много общего с кодом TCL, который взаимодействует с моим приложением, и теперь я хочу добавить в него графический интерфейс Tk.) Как создать простую кнопку 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;
}

компилируется и запускается, но не отображает анионное окно или другие ссылки. (

Что делать? Как загрузить Тк?

1 Ответ

1 голос
/ 05 июля 2011

Вы не сказали, что не получается, но это не сработает. Чтобы иметь графический интерфейс, вам необходим цикл обработки событий.

Я бы рекомендовал другой подход: превратить ваш код C ++ в Tcl-загружаемый модуль, тогда ваш скрипт может работать под wish и использовать как Tk, так и ваши объекты, реализованные в C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...