kaj*_*aco 12 c user-interface tcl
我一直致力于一个移植旧的solaris CL程序以在Linux上运行的项目,并禁止一些不相关的硬件问题,这已经完成.现在我想要一个GUI,因此用户可以选择带有下拉菜单和复选框的各种选项,以及一些不受限制的选项的文本输入区域,如文件名.(该程序是运行一些光谱扫描仪并将结果存储为CSV文件的内部工具.它处理所有这些选项,运行扫描仪并处理信息并使用指定的文件名存储它;我只想要比CL更好的使用. )
我见过这样的事情的唯一一次是一个PyGTK + GUI与C代码的python绑定(我认为它是什么;这是我的第一个学期合作,我不太了解!).这比我现在想要的更多一点; 有一个相对简单的方法来做到这一点?当我用Google搜索时,我找到了SWIG(http://www.swig.org/index.php); 这是一个好方法吗?
Con*_*lls 17
这听起来就像Tcl/Tk的设计目标.它有一个非常简单的C API,允许您使用回调注册命令.如果在Tcl程序中使用该命令,它将调用回调并提供一种机制来转换Tcl列表(本机数据结构)和char*的ARGV样式数组之间的参数.
它专门设计用于轻松地将这种包装器改装为命令行驱动的C程序.您还可以使用各种其他模式来连接解释器,并且很容易将程序作为脚本语言嵌入.从内存中可用的接口机制是:
Ousterhout的书Tcl和TK Toolkit有点陈旧,但有很好的C API指南.Welch 在Tcl/Tk中的实用编程是另一本经典的Tcl/Tk书籍,并且更新更频繁.还有其他的一些书籍和互联网上相当多的电子资源.一些好的起点是:Tcl教程,TK教程,Tcl倡导网站(可能值得仔细阅读以帮助您决定是否要沿着这条路走下去),Tcl/Tk Wiki以及Stackoverflow.
TK将为您提供简单的GUI,并且很容易学习编程 - 如果有点简单.如果你花一些时间来调整外观或使用像Tile这样的主题引擎,它就不像以前那么难看.
正如诺曼·拉姆齐( Norman Ramsey)指出的那样(+1),另一种使用简单C API的替代方案是Lua. 两者都有优点和缺点.Tcl的主要优势是简单而干净整合的TK工具包以及来自第三方库(例如Tix)的良好,成熟的支持.Lua的主要优势在于语言更好,但没有标准的GUI工具包,因此UI没有很好地集成.Lua也为解释器中的线程提供了更好的支持,这是从头开始为此设计的.但是,如果您要包装旧版C/unix应用程序,则这不太可能是一个重要功能.
WXWidgets比TK复杂得多,运行时间更长,但功能更丰富.
如果您有充分的理由认为您的脚本项目将成长为更大的应用程序,您可能会考虑Lua.但是,在更大规模上,您将进入一个实质性的开发项目,Python或Ruby开始成为可行的选择.随着项目变得越来越大,C代码库将占整个项目的一小部分,第三方库支持将是一个更大的考虑因素.
如果您使用Tcl并发现您的项目有自己的生命,请考虑嵌入Tcl解释器并将应用程序重新转换为插件API,人们可以将自己的脚本挂钩.额外的功能可以作为脚本完成,并可能在第三方进行维护.具有内置脚本语言的系统的一个优点是,您个人不一定必须实现功能.人们可以用脚本语言编写自己的扩展,或让第三方为他们做.
SWIG旨在生成库周围的包装器.它解析头文件并生成一个粘贴层,以目标语言呈现本机API.要使用它,您必须将程序重新分解为库.
正如其他人所说,Tcl/Tk 是一个不错的选择。您将面临超出 Tcl 语言的真正风险,但是这种风险可以通过Tk 窗口工具包的出色功能和简单性来减轻。
我会考虑的另一个选择是wxlua。原因是Lua是一种您不会过时的语言。您可能还喜欢 wxlua,因为它基于wxwidgets,它会给您 GUI原生的外观和感觉。最初的 Tk 有一个相当奇怪和非常非原生的外观和感觉,但现在情况好多了,所以这个原因可能没有多大影响力。您可能会查看这两个 GUI 工具包以了解其吸引力。您可能更喜欢 Lua 的最后一个原因是,将用户定义的数据类型公开给 GUI 和脚本更容易。
我不会考虑 Python 和 Gtk+ 等替代方案,因为那里有所有替代方案,只有 Tcl 和 Lua 从一开始就被设计为与 C 程序结合。
您还询问了 SWIG。虽然它表面上很有吸引力,但我建议避免它。Tcl 和 Lua 都有非常简单的 C API,如果您学会自己使用本机 API而不是让 SWIG 为您生成代码,您将学到更多、更好地理解并更好地控制您的应用程序。