在我们的生物信息学实验室,我们最近被要求为用 C 编写(和优化)的程序创建一个 GUI。我们设计的任何 GUI 都需要能够向 C 程序提供输入并接收来自 C 程序的输出,同时也很容易可移植到 Windows 和 Mac。有什么方法可以做到这一点?
7 回答
如果您正在寻找适用于 C 语言的 windows/mac 的 GUI 工具包,您考虑过GTK吗?
使用单独的程序。
它不会破坏现有代码 - 如果代码具有程序员可能不知道/理解/测试的生物知识,则尤其重要。
Gui 经常变化,几年后你将重写 NewSuperOsToolkit(tm) 的 gui,但底层工作代码不会改变。我们有大气建模代码,我确信它最初是用拉丁文编写的。
您保留了将引擎代码作为批处理、在云中的 MPI 上并行运行的能力,以及一系列您没有想到的其他方式。
您可以用 Java 编写前端 GUI,并让它们提供输入并从您的 C 程序接收输出。我认识几个在这里工作的小组,他们用 C# 和 C 代码做类似的事情(但他们没有多平台限制)。
这样您就不必使用 C 工具包创建 GUI。
有许多带有语言的脚本可以使这变得容易。我会选择 tcl/tk,它几乎可以在 mac 上开箱即用,并且几乎可以跨平台跨任何你能想到的机器。
GTK 也很棒,许多脚本语言都有它的绑定。
如果你不需要的话,你可能不想用 c 写你的 gui。使用快速开发的脚本语言。
根据程序的性质,您可以创建一个完全独立的 GUI 应用程序(使用您喜欢的任何语言),并从中分叉/执行现有程序,将其标准输入和标准输出重定向到您的 GUI 程序。根据现有程序的工作方式,这可能运行良好,也可能非常麻烦。
您还可以使用 GTK(具有 C API)之类的 GUI 代码扩展现有程序,或者您可以使用 Qt(它是 C++,但如果您将它们定义为“extern”,从 C++ 调用 C 函数通常没有问题C”')。
如果你想要一个原生的 GUI,那么使用 wxWidgets 或 QT。(我使用 wxWidgets ...)
另一种方法是拥有一个使用 Javascript 和 CSS 的基于 HTML 的界面。您完全避免使用 GUI 库,获得跨平台支持,结果在某些方面更好,在其他方面更差。
如果你真的想要一个独立的用户界面,你可以用 WebKit 之类的东西将它集成到一个二进制文件中。