#gui-framework #egui #web-native #gamedev #web-apps

eframe

egui 框架 - 编译到网页和/或原生的 GUI 应用程序

35 个版本 (21 个破坏性)

0.28.1 2024 年 7 月 5 日
0.27.2 2024 年 4 月 2 日
0.27.1 2024 年 3 月 29 日
0.24.1 2023 年 11 月 30 日
0.10.0 2021 年 2 月 28 日

103GUI

Download history 17252/week @ 2024-05-05 18744/week @ 2024-05-12 18173/week @ 2024-05-19 20062/week @ 2024-05-26 20422/week @ 2024-06-02 15893/week @ 2024-06-09 18034/week @ 2024-06-16 18072/week @ 2024-06-23 17245/week @ 2024-06-30 20801/week @ 2024-07-07 23033/week @ 2024-07-14 22480/week @ 2024-07-21 21034/week @ 2024-07-28 21836/week @ 2024-08-04 26416/week @ 2024-08-11 20214/week @ 2024-08-18

91,372 每月下载量
用于 321 个 Crates (282 直接)

MIT/Apache

2MB
33K SLoC

eframe:egui 框架

Latest version Documentation MIT Apache

eframe 是使用 egui 编写应用的官方框架库。应用可以编译为原生运行(适用于 Linux、Mac、Windows 和 Android)或作为 Web 应用(使用 Wasm)。

要开始,请查看 示例。要了解如何为网页和原生设置 eframe,请访问 https://github.com/emilk/eframe_template/ 并按照那里的说明操作!

还有https://www.youtube.com/watch?v=NtUkr_z7l84 上的教程视频。

有关如何使用 egui 的信息,请参阅 egui 文档


eframe 使用 egui_glow 进行渲染,并在原生上使用 egui-winit

要在 Linux 上使用,首先运行

sudo apt-get install libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libssl-dev

您需要使用 edition = "2021",或者在您的顶层 Cargo.toml[workspace] 部分中设置 resolver = "2"。有关更多信息,请参阅此链接

您可以选择使用egui_wgpu进行渲染,通过启用wgpu功能并将NativeOptions::renderer设置为Renderer::Wgpu来启用。

为了在网络上实现复制粘贴功能,您需要编译时使用export RUSTFLAGS=--cfg=web_sys_unstable_apis

替代方案

eframe并不是使用egui编写应用程序的唯一方式!您还可以尝试egui-miniquadbevy_eguiegui_sdl2_gl等。

您还可以使用egui_glowwinit来构建自己的应用程序,如https://github.com/emilk/egui/blob/master/crates/egui_glow/examples/pure_glow.rs所示。

在网络上运行egui时的限制

eframe使用WebGL(通过glow)和Wasm,几乎没有使用其他Web技术栈。这带来了一些好处,但也产生了一些挑战和严重的缺点。

  • 渲染:在网络上实现像素级渲染非常困难。
  • 搜索:您不能像在普通网页上那样搜索egui网页。
  • 在移动设备上显示屏幕键盘:没有JS函数可以做到这一点,所以eframe通过添加一些不可见的DOM元素来模拟。它并不总是有效。
  • 移动文本编辑不如普通Web应用程序。
  • 没有与浏览器颜色和字体设置的集成。
  • 无障碍性:存在一个实验性的屏幕阅读器,用于eframe,但必须显式启用。没有JS函数可以询问“用户是否想要屏幕阅读器?”(由于用户跟踪/完整性问题,可能不应该有这样的函数)。egui支持AccessKit,但截至2024年初,AccessKit缺少Web后端。

在许多方面,eframe试图让浏览器做它不是设计来做的事情(尽管浏览器厂商可以做很多事情来改善像egui这样的库的工作方式)。

建议使用eframe的场景是性能和响应性比无障碍性和移动文本编辑更重要的Web应用程序。

配套库

并非所有Rust库在编译为Wasm时都能正常工作,但以下是一些设计得很好,既可以本地运行也可以作为Wasm运行的库:

名称

eframe中的frame既代表您的egui应用程序所在的框架,也代表“框架”(eframe是一个框架,egui是一个库)。

依赖关系

~6–51MB
~810K SLoC