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

简介: 【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

相关文章
|
人工智能 API 开发者
HarmonyOS Next~鸿蒙应用框架开发实战:Ability Kit与Accessibility Kit深度解析
本书深入解析HarmonyOS应用框架开发,聚焦Ability Kit与Accessibility Kit两大核心组件。Ability Kit通过FA/PA双引擎架构实现跨设备协同,支持分布式能力开发;Accessibility Kit提供无障碍服务构建方案,优化用户体验。内容涵盖设计理念、实践案例、调试优化及未来演进方向,助力开发者打造高效、包容的分布式应用,体现HarmonyOS生态价值。
859 27
|
数据采集 机器学习/深度学习 存储
可穿戴设备如何重塑医疗健康:技术解析与应用实战
可穿戴设备如何重塑医疗健康:技术解析与应用实战
727 4
|
机器学习/深度学习 人工智能 Java
Java机器学习实战:基于DJL框架的手写数字识别全解析
在人工智能蓬勃发展的今天,Python凭借丰富的生态库(如TensorFlow、PyTorch)成为AI开发的首选语言。但Java作为企业级应用的基石,其在生产环境部署、性能优化和工程化方面的优势不容忽视。DJL(Deep Java Library)的出现完美填补了Java在深度学习领域的空白,它提供了一套统一的API,允许开发者无缝对接主流深度学习框架,将AI模型高效部署到Java生态中。本文将通过手写数字识别的完整流程,深入解析DJL框架的核心机制与应用实践。
891 3
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
549 4
|
缓存 监控 搜索推荐
【实战解析】smallredbook.item_get_video API:小红书视频数据获取与电商应用指南
本文介绍小红书官方API——`smallredbook.item_get_video`的功能与使用方法。该接口可获取笔记视频详情,包括无水印直链、封面图、时长、文本描述、标签及互动数据等,并支持电商场景分析。调用需提供`key`、`secret`和`num_iid`参数,返回字段涵盖视频链接、标题、标签及用户信息等。同时,文章提供了电商实战技巧,如竞品监控与个性化推荐,并列出合规注意事项及替代方案对比。最后解答了常见问题,如笔记ID获取与视频链接时效性等。
|
Rust 安全 Java
探索Rust语言的并发编程模型
探索Rust语言的并发编程模型
448 2
|
Rust 安全 区块链
探索Rust语言:系统编程的新选择
【10月更文挑战第27天】Rust语言以其安全性、性能和并发性在系统编程领域受到广泛关注。本文介绍了Rust的核心特性,如内存安全、高性能和强大的并发模型,以及开发技巧和实用工具,展示了Rust如何改变系统编程的面貌,并展望了其在WebAssembly、区块链和嵌入式系统等领域的未来应用。
|
Rust 安全 编译器
编程语言新宠:Rust语言的特性、优势与实战入门
【10月更文挑战第26天】Rust语言诞生于2006年,由Mozilla公司的Graydon Hoare发起。作为一门系统编程语言,Rust专注于安全和高性能。通过所有权系统和生命周期管理,Rust在编译期就能消除内存泄漏等问题,适用于操作系统、嵌入式系统等高可靠性场景。
1575 2
|
Rust 安全 Java
编程语言新宠:Rust语言的特性、优势与实战入门
【10月更文挑战第27天】Rust语言以其独特的特性和优势在编程领域迅速崛起。本文介绍Rust的核心特性,如所有权系统和强大的并发处理能力,以及其性能和安全性优势。通过实战示例,如“Hello, World!”和线程编程,帮助读者快速入门Rust。
1638 1
|
Rust 安全
深入理解Rust语言的所有权系统
深入理解Rust语言的所有权系统
532 0

推荐镜像

更多
  • DNS