Ubuntu 下 Fortran 图形界面编程方法
一 常用方案与选型
- GTK 生态:使用 GTK 3/4 与 gtk-fortran 绑定,适合需要现代桌面外观、跨平台与稳定维护的场景。gtk-fortran 基于 Fortran 2003 C 互操作,提供贴近 GTK 的 API。
- FLTK:轻量级、跨平台 C/C++ GUI 工具包,存在 Fortran 绑定(发行包名在不同发行版可能不同,如 libfltk-fortran-dev),上手快、依赖少,适合中小型工具。
- IUP:轻量级 GUI,支持多语言(含 Fortran),API 简洁,适合快速原型。
- wxWidgets:成熟跨平台 C++ 框架,部分发行版提供 Fortran 绑定(如 libwxgtk3.0-fortran-dev),适合复杂桌面应用。
- Qt:主流 C++ 框架,Qt 官方不直接提供 Fortran 绑定;若坚持 Qt,可通过 C/C++ 写 UI + ISO_C_BINDING 暴露接口供 Fortran 调用,或采用混合编程。
- 补充:PGPLOT 是面向绘图的库(Fortran 接口),可输出到 X Window 等装置,适合科研绘图,但并非通用 GUI 工具包。
二 环境准备与安装
- 安装编译器与基础工具:
- sudo apt update && sudo apt install -y gfortran build-essential cmake git
- 安装 GUI 库与开发文件(按所选方案二选一或多项):
- GTK 3:sudo apt install -y libgtk-3-dev
- GTK 4:sudo apt install -y libgtk-4-dev
- FLTK(含 Fortran 绑定的发行版):sudo apt install -y libfltk1.3-dev fltk-data fltk-doc 以及可用的 libfltk-fortran-dev
- IUP:sudo apt install -y libiup-dev
- wxWidgets:sudo apt install -y libwxgtk3.0-dev 以及可用的 libwxgtk3.0-fortran-dev
- Qt(若采用混合编程):sudo apt install -y libqt5core5a libqt5gui5 libqt5widgets5
- 说明:Fortran 通过 ISO_C_BINDING 调用 C 库,编译时通常配合 pkg-config 获取头文件与链接参数。
三 快速上手示例
四 构建与排错要点
- 链接参数获取:优先使用 pkg-config,如
pkg-config --cflags --libs gtk+-3.0 或 pkg-config --cflags --libs gtk-4-fortran;若返回为空或报未找到,请确认相应 -dev 包已安装,并在必要时设置 PKG_CONFIG_PATH 指向已安装库路径。
- 找不到 GTK 库:先执行
pkg-config --cflags gtk4 或 pkg-config --cflags gtk+-3.0 验证;未安装则补装 libgtk-4-dev 或 libgtk-3-dev;已安装仍报错时,清理 CMake 缓存(删除 CMakeCache.txt)后重新配置。
- 绑定可用性:并非所有发行版仓库都提供 FLTK/ wxWidgets 的 Fortran 绑定,如未找到对应包,可考虑从源码构建或使用其他绑定方案。
- 混合编程思路:若采用 Qt,可用 C++/Qt 实现 UI 与事件循环,通过 ISO_C_BINDING 暴露接口,由 Fortran 实现数值核心,再由 C/C++ 调用 Fortran 例程。
五 方案对比与建议
| 方案 |
依赖与安装难度 |
Fortran 支持形态 |
典型用途 |
备注 |
| GTK 3/4 + gtk-fortran |
中等(GTK 与 gtk-fortran) |
原生 Fortran 模块封装 |
通用桌面 GUI |
外观现代、跨平台、文档与社区较好 |
| FLTK + Fortran 绑定 |
低-中(FLTK 本体 + 绑定) |
绑定库(发行版可能缺) |
小型工具、快速原型 |
轻量、依赖少 |
| IUP |
低-中 |
官方支持多语言 |
轻量 GUI |
API 简洁 |
| wxWidgets + Fortran 绑定 |
中-高 |
绑定库(视发行版) |
复杂桌面应用 |
成熟但绑定可得性因发行版而异 |
| Qt(混合编程) |
中-高(Qt 开发环境) |
ISO_C_BINDING 调用 |
企业级桌面应用 |
官方无 Fortran 绑定,需 C/C++ 胶水层 |
| PGPLOT |
中(X11 等依赖) |
Fortran 77/90 接口 |
科研绘图 |
非通用 GUI,偏重绘图输出 |