vgtkRust 实现的桌面 UI 框架

联合创作 · 2023-09-28 06:08

vgtk 是 Rust 编写的声明式桌面 UI 框架,内置了 GTK 和 Gtk-rs。


示例



use vgtk::{ext::*, gtk, run, Component, UpdateAction, VNode};
use vgtk::lib::{gtk::*, gio::ApplicationFlags};

#[derive(Clone, Default, Debug)]
struct Model {
counter: usize,
}

#[derive(Clone, Debug)]
enum Message {
Inc,
Exit,
}

impl Component for Model {
type Message = Message;
type Properties = ();

fn update(&mut self, message: Message) -> UpdateAction<Self> {
match message {
Message::Inc => {
self.counter += 1;
UpdateAction::Render
}
Message::Exit => {
vgtk::quit();
UpdateAction::None
}
}
}

fn view(&self) -> VNode<Model> {
gtk! {
<Application::new_unwrap(None, ApplicationFlags::empty())>
<Window border_width=20 on destroy=|_| Message::Exit>
<HeaderBar title="inc!" show_close_button=true />
<Box spacing=10 halign=Align::Center>
<Label label=self.counter.to_string() />
<Button label="inc!" image="add" always_show_image=true
on clicked=|_| Message::Inc />
</Box>
</Window>
</Application>
}
}
}

fn main() {
std::process::exit(run::<Model>());
}


特性



  •  Elm 架构Redux 和 Yew 启发,采用了简洁、实用的组件模型 

  • 采用了一种声明式 DSL,用于组合受 React 和 JSX 启发的 GTK 小部件,使用虚拟“DOM”差异进行有效更新

  • 完全跨平台,具有适用于 Linux、Windows 和 macOS 的原生外观

  • 无需依赖嵌入式浏览器引擎

  • 基于 Rust 的Future构建,使用 GLib 的事件循环,提供了与 GTK 事件模型干净集成的 async/await

浏览 34
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报