【Rust 实战】Rust GUI 框架—抖音短视频解析工具GUI

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【Rust 实战】Rust GUI 框架—抖音短视频解析工具GUI

0x00 开篇


上周我们写了一个短视频解析小工具,但是运行起来是一个“黑框”,那本篇文章将介绍一个 Rust 的 GUI 框架来给这个小工具“穿上衣服”。本篇文章涉及到的 GUI 框架是 TauriFLTK-rs。我先会做一个简单的入门介绍,然后再使用它们来包装这个短视频解析的小工具。本文并不会详细介绍 TauriFLTK-rs 的使用教程。其实 Rust 到目前为止已经出现很多 GUI 框架了,还有 iced 等等。本篇文章的阅读时间大约 12 分钟


0x01 认识 Tauri


Tauri 类似于 Electron ,但是  Tauri 使用系统自带的网页渲染器,没有将 chromium 打进包内,所以打出包大小的体积非常小。在 WindowsTauri 基于 Microsoft EdgeChromiumWebView2(Windows 11预装,Windows 10 最新版已预装,Windows 7 可以额外下载运行时)。在LinuxmacOS 上使用的是 WebKit

Tauri 的界面使用 Htmljscss来构建,支持 VueReact 等框架。具体的业务实现逻辑使用 Rust来构建。


0x02 创建 Tauri 项目


准备工作


  • 系统:Windows 11 64位
  • WebView2:系统预装
  • pnpm
  • rust
  • VSCode

创建项目


通过命令 pnpm create tauri-app 创建项目。


0a2653c851af460fa595bd959398a8f1.png


我这里习惯选择了 vue-ts UI 模板,可以根据自己的喜好来选择。最终项目目录如下:


2d65d23f6d4748949b924e4057485923.png


然后执行命令pnpm install安装依赖,使用命令pnpm tauri dev 就是运行项目了。首次编译项目会非常慢。

在 Rust 的 main.rs 中,我们所有给前端页面的接口都需要通过tauri::generate_handler!来"注册"。

tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![get_dy_info])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");

前端页面需要使用 invoke() 方法来调用 Rust 的函数。注意:所有给前端的 Rust 函数都是异步返回的。

let info = await invoke("get_dy_info", { input: input.value })

我们将上一篇文章的源码稍微改动下。


Coding中...请等待...


最终效果


0a2653c851af460fa595bd959398a8f1.png


打包分发


2d65d23f6d4748949b924e4057485923.png


首先我们要先修改tauri.conf.json 中的 identifier,  改为 com.tauri.build,然后执行命令

pnpm tauri build


首次构建会下载 wix。当然还可以对安装包进行一些自定义的优化,详见官方文档。另外,Tauri暂不支持 portable 模式,俗称绿色版。


0x03 认识 FLTK-rs


再来了解下另一个 GUI 框架。FLTK (The Fast Light Tool Kit)是一个跨平台的轻量级GUI库,支持 Linux、Windows、MacOS。如果你觉得 Tauri 有点重或者是不熟悉前端语法,那我推荐你使用这个库,使用起来也非常简单,仅仅导入一个 crate 就可以了。

fltk = { version = "1.3.19", features = ["fltk-bundled"] }


0x04 使用 fltk-rs


简单使用


几行代码,一个窗口就可以创建。下面的代码就是创建一个窗口了。

use fltk::{app, prelude::*, window::Window};
fn main() {
    let app = app::App::default();
    let mut wind = Window::new(100, 100, 800, 300, "hello Rust!");
    wind.end();
    wind.show();
    app.run().unwrap();
}


移植代码,Coding中...请等待...


最终效果


0a2653c851af460fa595bd959398a8f1.png


说实话除了丑一点,其它还好。


0x05 小结


本篇文章主要来探讨 Rust GUI 框架目前的可行性。在桌面跨平台 GUI 方便,目前面对Flutterelectron 等框架,Rust 还有很长的路要走。如果目前真需要用 Rust 做一些小工具,我推荐使用 tauri


0x06 参考资料


Tauri 官方文档:https://tauri.app/zh-cn/v1/guides/

FLTK 中文文档:https://flatig.vip/fltk-book-zh/Home.html

相关文章
|
16天前
|
自然语言处理 编译器 Linux
|
21天前
|
Prometheus 监控 Cloud Native
实战经验:成功的DevOps实施案例解析
实战经验:成功的DevOps实施案例解析
36 6
|
18天前
|
UED
<大厂实战经验> Flutter&鸿蒙next 中使用 initState 和 mounted 处理异步请求的详细解析
在 Flutter 开发中,处理异步请求是常见需求。本文详细介绍了如何在 `initState` 中触发异步请求,并使用 `mounted` 属性确保在适当时机更新 UI。通过示例代码,展示了如何安全地进行异步操作和处理异常,避免在组件卸载后更新 UI 的问题。希望本文能帮助你更好地理解和应用 Flutter 中的异步处理。
61 3
|
18天前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
99 1
|
11天前
|
前端开发 中间件 PHP
PHP框架深度解析:Laravel的魔力与实战应用####
【10月更文挑战第31天】 本文作为一篇技术深度好文,旨在揭开PHP领域璀璨明星——Laravel框架的神秘面纱。不同于常规摘要的概括性介绍,本文将直接以一段引人入胜的技术剖析开场,随后通过具体代码示例和实战案例,逐步引导读者领略Laravel在简化开发流程、提升代码质量及促进团队协作方面的卓越能力。无论你是PHP初学者渴望深入了解现代开发范式,还是经验丰富的开发者寻求优化项目架构的灵感,本文都将为你提供宝贵的见解与实践指导。 ####
|
12天前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
12 0
|
13天前
|
Rust 自然语言处理 API
|
14天前
|
前端开发 JavaScript
JavaScript新纪元:ES6+特性深度解析与实战应用
【10月更文挑战第29天】本文深入解析ES6+的核心特性,包括箭头函数、模板字符串、解构赋值、Promise、模块化和类等,结合实战应用,展示如何利用这些新特性编写更加高效和优雅的代码。
32 0
|
8天前
|
Rust 安全 Java
探索Rust语言的并发编程模型
探索Rust语言的并发编程模型
|
15天前
|
Rust 安全 区块链
探索Rust语言:系统编程的新选择
【10月更文挑战第27天】Rust语言以其安全性、性能和并发性在系统编程领域受到广泛关注。本文介绍了Rust的核心特性,如内存安全、高性能和强大的并发模型,以及开发技巧和实用工具,展示了Rust如何改变系统编程的面貌,并展望了其在WebAssembly、区块链和嵌入式系统等领域的未来应用。

推荐镜像

更多