Rust GUI库和框架介绍及比较

10,906 阅读8分钟

图形用户界面(GUI)为与计算机的互动提供了一个直观的视觉前端。GUI使用图标、窗口和菜单等视觉指示器,以获得更好的用户互动和体验,而不像命令行界面(CLI)那样使用文本进行输入和输出操作。

随着时间的推移,Rust越来越受欢迎,这可能是由于它的灵活性和充满活力的开源社区。开发人员已经将Rust用于系统设计、网络开发和构建GUI等方面。你可以使用许多包和篮子来开发快速、复杂的Rust GUI应用程序。

在这篇文章中,我们将谈论流行的Rust GUI库和框架,如gtk-rsfltk-rsicedrelm 、Azul、和egui 。我们还将比较这些GUI库,并讨论它们如何成为构建你的GUI应用程序的好选择。

让我们开始吧!

gtk-rs

GTK是一个流行的跨平台、面向对象的部件工具包,由GNOME项目开发。它被用来构建可移植的GUI应用程序,可以在Unix、Windows和macOS系统上使用多种语言,从Python到JavaScript、C和Rust。

GTK项目有各种版本,如GTK 3,每个版本都有变化和升级。

gtk-rs 项目为基于GNOME堆栈的库提供安全的Rust绑定,如GTK 3和GTK 4库。该gtk3-rsgtk4-rs库分别提供了GTK 3和GTK 4的功能。

Gtk-rs Library

要开始使用gtk-rs 库,你需要Rust工具链和GTK库。在创建项目后,在GTK 4 crate的Cargo.toml 文件中把该库添加到你的依赖项中。

gtk = { version = "X.X", package = "gtk4" }

如果你是在macOS或Linux上,使用brew软件包管理器安装GTK 4库。

brew install gtk4

请查看这些页面,了解各种Linux发行版Windows的安装说明。

在安装gtk4 ,并将其添加到你的依赖项中后,你可以像这样导入crate。

use gtk::prelude::*;
use gtk::Application;

gtk-rs一书是学习如何使用该库在Rust中构建GUI的良好资源。

GTK库在开发者社区很受欢迎。许多流行的Linux GUI应用程序使用GTK库和GNOME栈。gtk-rs 库只是众多准备投入生产的Rust GUI库中的一个,已经在500多个项目中使用。

fltk-rs crate

FLTK(Fast Light Toolkit)是一个轻量级、跨平台支持的工具包,用于构建GUI。FLTK支持Windows、macOS和UNIX系统,最初是为C++构建的。如果你使用FLTK工具包来创建一个GUI应用程序,该应用程序在所有支持的操作系统上看起来都是一样的。

fltk-rs 库为FLTK工具包提供Rust绑定。fltk-rs crate支持旧的架构,有80多个可定制的小部件和超过4个支持的主题方案,包括GTK方案。你也可以使用 fltk-theme crate来进行更多的定制。

Fltk-rs Crate

fltk-rs 库可以快速安装、构建、启动和运行,只需一次执行。开始使用fltk-rs crate很容易--你所要做的就是把该项目作为依赖关系添加到你的Cargo.toml 文件中,并在你的计算机上安装该库。

如果你使用的是macOS或Linux电脑,你可以使用这个brew命令安装fltk 库。

brew install fltk

你可以在链接页面上找到为其他操作系统安装 fltk 库的说明。将该项目作为一个依赖项添加到你的Cargo.toml 文件中。

[dependencies]
fltk = { version = "^1.3", features = ["fltk-bundled"] }

在添加项目和安装fltk 库后,你可以将板条箱导入你的项目中。

use fltk::{app, button::Button, frame::Frame, prelude::*, window::Window};

查看fltk-rs 文档,了解其功能和用途的详细概述。

fltk 库相当受欢迎,有800多颗星。它的发展速度很快,目前有200多个版本,你可以在生产中使用该库而不必担心。

根据许多其他开发者的说法,使用fltk-rs 库比C++库更直接。

iced

iced是一个与渲染器无关的、包含电池的、以数据为中心的跨平台Rust库,用于构建GUI和前端,其灵感来自Elm架构。 iced 库提供了一个易于使用的反应式编程模型,对异步操作和自定义小部件提供一流的支持。

The Iced Library

iced 库构建的GUI应用程序可以在Windows、macOS、Linux和网络(使用DOM)上运行,具有响应式布局。传统上,iced将应用程序分成四个概念。

  • 状态:用于应用程序的状态
  • 消息:用于消息和事件
  • 视图逻辑:用于将状态显示为用户交互的小部件
  • 更新逻辑:用于更新状态和与消息进行交互

你可以很容易地开始使用Iced库来开发前端Web应用程序。这个过程类似于构建GUI应用程序,你可以查看iced文档以了解更多关于该包的信息。

iced 库是最受欢迎的Rust库之一,因为它的通用性。虽然该库被用于许多项目,但它相当不稳定,而且发展迅速。你可以求助于使用较早的版本,因为主分支在不断变化,在生产中使用可能会很昂贵。

你可以在这个资源库中找到用于激发灵感的项目、代码示例和库的实现。

relm

relm是一个基于GTK的异步GUI库,最初用Rust编写。它的灵感来自Elm架构,以简化GTK库的使用并提供类似Elm的体验。

像GTK库一样,你可以使用relm构建跨平台的GUI。

The Relm Library

你需要有使用GTK库的经验来使用relm,并从该库中获得最大的好处。

要使用relm,你需要在你的Cargo.toml 文件中将gtkrelm 库添加到你的项目的依赖中。你还需要安装gtk 库。

[dependencies]
gtk = "0.9.0"
relm = "0.20.0"
relm-derive = "0.20.0"

你还必须将gtk 箱子与relm 箱子一起导入。

use relm::{connect, Relm, Update, Widget};
use gtk::prelude::*;
use gtk::{Window, Inhibit,a WindowType};
use relm_derive::Msg;

Rust社区很欣赏relm,因为它提供了类似Elm的体验,而其他Rust库,如Yew、Seed和iced,则提供了这种体验。relm 库处于测试阶段,还没有经过适当的测试,而且变化很快。鉴于此,你可能还不想在生产中使用它。

Azul框架

Azul框架是一个反应式GUI库,用于用Rust、C和C++构建桌面GUI。它由WebRender驱动,是一个文档对象模型,类似于HTML和CSS。由于Azul利用了WebRender,它提供了梯度、盒状阴影、边框样式和CSS变换等功能。

The Azul Framework

Azul框架还提供了很多内置的小工具,每秒超过60帧的动画,跨平台的本地对话,SVG解析,通过共享库的动态链接,以及用于热重载的HTML到Rust的编译。

要开始使用Azul框架,请将其添加到你项目的依赖项中。

[dependencies]
azul = "1.0.0-alpha"

然后,将板条箱导入你的项目并使用它们。

use azul::prelude::*;
use azul::widgets::{button::Button, label::Label};

Azul框架有完善的文档,可以帮助你开始构建GUI。

Azul框架采用了一种不同的GUI开发方法,到目前为止,该框架已经被用于200多个Rust项目中。Azul框架是功能性的,而且,根据文档,你可以在生产中使用它。

egui

egui 库是一个即时模式的、易于使用的、可移植的库,用于在Rust中构建GUI,并在网络、计算机和游戏引擎(开发中)上运行。它的目标是成为用Rust构建网络应用的最简单的库。

The Egui Library

egui 库旨在为构建GUI提供安全、响应、友好和可移植的体验,没有回调,依赖性最小。查看egui的官方文档,了解如何使用它来制作跨平台的GUI。

egui 库正在积极开发中,如果你有足够的勇气,你可以在生产中使用它。egui 库的特定部分已经准备好了,你可以求助于较早的版本,因为较新的版本容易出现破坏性的变化。

比较Rust GUI库

本文讨论的GUI库有不同的特点和功能。这里有一个GUI库之间的比较表,以帮助你为你的下一个项目做出选择和考虑!

生产就绪兼容性
gtk-rs是的跨平台
fltk-rs跨平台
结冰不适用跨平台和网络
继电器没有跨平台
阿苏是的跨平台
兴发xf187在线娱乐较早的版本跨平台

Rust生态系统中的GUI库大多是不成熟的项目,有很多好的功能。

对于你的项目来说,你要考虑你的应用程序的项目状态。使用未经测试的库或不具备生产条件的库是有风险的。你也要考虑项目的兼容性,基于你正在建立的项目和项目将或应该运行的地方。

举例来说,iced 库很受欢迎,因为它可以在Windows、Linux、macOS和网络上运行。这可能是一个很好的选择,因为你的应用程序可以共享相似性,而且会更容易维护。考虑到该库的遗产,gtk-rs 库也很可爱。此外,如果你想走榆树的路,你可以使用relm 库。

总结

在Rust生态系统中还有许多其他的GUI库,你可以在Are We GUI YetLibHunt上找到一个全面的列表。

本教程向你介绍了Rust生态系统中流行的GUI库,包括gtk-rsfltk-rs,iced,relm, Azul, 和egui

希望本教程能帮助你在选择下一个项目的GUI库时有更多的见解