我一直致力于移植旧的solaris CL 程序以在Linux 上运行的项目,并且除了一些不相关的硬件问题,该项目已经完成。现在我想要一个 GUI,这样用户就可以在带有下拉菜单和复选框的各种选项中进行选择,以及一些不受限制的选项的文本输入区域,比如文件名。 (该程序是一个内部工具,用于运行一些光谱扫描仪并将结果存储为 CSV 文件。它处理所有这些选项,运行扫描仪并处理信息并使用指定的文件名存储它;我只是想要比 CL 更好用的东西。 )
我唯一一次看到这样的事情是 PyGTK+ GUI 和 C 代码的 python 绑定(bind)(我认为就是这样;那是我第一学期的合作,我不太明白!)。这比我现在想要的要多一些。有没有一种相对简单的方法来做到这一点?当我用谷歌搜索时,我发现了 SWIG ( http://www.swig.org/index.php );这是一个好方法吗?
最佳答案
这听起来正是为 Tcl/Tk 设计的工作。它有一个非常简单的 C API,允许您使用回调注册命令。如果您在 Tcl 程序中使用该命令,它将调用回调并提供一种机制来在 Tcl 列表( native 数据结构)和 ARGV 样式的 char* 数组之间转换参数。
它专门设计为易于将此类包装器改造为命令行驱动的 C 程序。您还可以使用多种其他模式来连接解释器,并且很容易将其作为脚本语言嵌入到程序中。根据内存,可用的接口(interface)机制是:
解释器
编程并使用 Tcl 作为嵌入式
脚本语言(可能包括注册命令和回调到您的
程序)
标准输入/标准输出(你也可以附加一个
管道的事件处理程序
当数据可用时调用)
fork/exec 或通过套接字连接。
Ousterhout 的书 Tcl and the TK Toolkit 有点过时,但对 C API 有很好的指导。 Welch 的 Practical Programming in Tcl/Tk 是另一本经典的 Tcl/Tk 书籍,更新频率更高。网上还有several other books和相当多的电子资源。一些好的起点是: Tcl tutorial 、 TK tutorial 、 Tcl advocacy site (可能值得仔细阅读以帮助您决定是否要沿着这条路线走), 0x2518118223 和 1341814223133131313313131423
TK 将为您提供一个简单的 GUI,并且很容易学习编程 - 如果有点简单。如果您花一些时间到 Tcl/Tk Wiki 或使用诸如 Stackoverflow 之类的主题引擎,则它不是 ugly as it used to be
正如 Norman Ramsey tweak the appearance ,另一个具有简单 C API 的替代方案是 Tile. 两者都有优点和缺点。 Tcl 的主要优势是简单且干净集成的 TK 工具包以及来自第三方库(例如 points out (+1) )的良好、成熟的支持。 Lua 的主要优势在于语言更好,但没有标准的 GUI 工具包,因此 UI 没有很好地集成。 Lua 还为解释器中的线程提供了更好的支持,这是从头开始设计的。但是,如果您要包装遗留的 C/unix 应用程序,这不太可能是一个重要的特性。
WXWidgets 比 TK 复杂得多,并带有更多的运行时包袱,但具有更丰富的功能集。
如果您有真正的理由认为您的脚本项目会成长为一个更大的应用程序,您可能会考虑使用 Lua。然而,在更大的范围内,您将进入一个重要的开发项目,并且 Lua. 或 Tix 开始成为可行的选择。随着项目越来越大,C 代码库将在整个项目中占据更小的部分,第三方库支持将成为一个更大的考虑因素。
如果您使用 Tcl 并发现您的项目有了自己的生命,请考虑嵌入 Tcl 解释器并将应用程序重新转换为插件 API,人们可以将自己的脚本挂接到其中。额外的功能可以作为脚本来完成,也可能会交给第三方进行维护。具有内置脚本语言的系统的优势之一是您个人不必实现功能。人们可以用脚本语言编写自己的扩展或让第三方为他们做。
SWIG 旨在为库生成包装器。它解析头文件并生成一个以目标语言呈现原生 API 的粘合层。要使用它,您必须将程序重新分解为一个库。
关于c - 如何将 GUI 改造为现有的 C 程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/385156/