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
浏览 17
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

编辑 分享
举报