3 个版本 (破坏性更改)

0.3.0 2020 年 7 月 5 日
0.2.0 2020 年 2 月 20 日
0.1.0 2020 年 2 月 7 日

#100 in #declarative

Download history 109/week @ 2024-03-31 12/week @ 2024-04-07 32/week @ 2024-04-14 31/week @ 2024-04-21 32/week @ 2024-04-28 9/week @ 2024-05-05 29/week @ 2024-05-12 13/week @ 2024-05-19 43/week @ 2024-05-26 21/week @ 2024-06-02 20/week @ 2024-06-09 22/week @ 2024-06-16 20/week @ 2024-06-23 7/week @ 2024-06-30 23/week @ 2024-07-14

每月 52 次下载
用于 vgtk

LGPL-3.0+

32KB
908

vgtk

一个基于 GTK 和 Gtk-rs 的 Rust 声明式桌面 UI 框架。

概览

  • 一个受 Elm 架构、Redux 和 Yew 启发的干净、功能组件模型。
  • 一个受 React 和 JSX 启发的声明式 DSL,用于组合 GTK 小部件,使用虚拟 "DOM" 差分进行高效更新。
  • 完全跨平台,适用于 Linux、Windows 和 macOS,具有本机的外观和感觉。
  • 基于 Rust 的 Future 使用 GLib 的事件循环,干净地集成到 GTK 事件模型,为您提供了 async/await 超能力
  • 绝对不需要嵌入浏览器引擎,除非您 真的想要一个

文档

展示给我!

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>());
}

安装

在使用 vgtk 之前,您需要确保您的系统已安装并可以使用 GTK。请参阅 Gtk-rs 需求文档 获取详细说明。在 Windows 上,这可能会特别复杂,但如果您仔细遵循他们的说明,最终还是会成功的。

入门

您可以使用 cargo generate 启动一个 vgtk 项目

cargo generate --git https://github.com/bodil/cargo-template-vgtk

或者,如果您不想安装 cargo generate,您可以克隆 模板仓库 并手动编辑 Cargo.toml 文件以适应您的项目。

要运行您的应用程序,请进入项目文件夹,并输入cargo run,并欣赏最终出现的那个小窗口以及您可以填充其中的奇迹。

示例

请参阅示例文件夹,其中包含一系列示例应用程序,包括完整的TodoMVC实现。要尝试TodoMVC示例,请克隆vgtk仓库,并从项目根目录运行cargo run --bin todomvc

许可证

本程序是免费软件:您可以根据自由软件基金会发布的GNU较小通用公共许可证的条款重新分发和/或修改它,无论是许可证的第3版,还是(根据您的选择)任何后续版本。

本程序的分发是希望它将是有用的,但没有任何保证;甚至没有关于适销性或特定用途的适用性的暗示保证。有关更多详情,请参阅GNU较小通用公共许可证。

您应该已经收到了GNU较小通用公共许可证的一份副本。如果没有,请参阅https://www.gnu.org/licenses/

依赖项

~0–1.9MB
~27K SLoC