【发布时间】:2011-07-06 01:50:29
【问题描述】:
所以我想在我的程序中执行 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怎么加载?
【问题讨论】:
-
出了什么问题?你得到一个错误? UI出现然后程序立即退出?没有 UI,程序就退出了?
-
cpptcl.cc 的第 895 行出现了一些可怕的错误
-
无 UI,程序退出。
-
您永远不会处理来自 X 服务器的数据,因此无法绘制 GUI。您需要使用 Tcl 的事件循环,这就是 Tk 与 X 服务器交互的方式。
标签: c++ user-interface tcl