4 个版本 (2 个重大更新)
0.3.0 | 2020 年 7 月 5 日 |
---|---|
0.2.1 | 2020 年 2 月 24 日 |
0.2.0 | 2020 年 2 月 20 日 |
0.1.0 | 2020 年 2 月 7 日 |
#1045 in GUI
每月 24 次下载
135KB
2K SLoC
vgtk
基于 GTK 和 Gtk-rs 构建的 Rust 桌面 UI 框架。
概述
- 一个干净的、功能性的组件模型,灵感来自 Elm 架构、Redux 和 Yew。
- 一个用于组合 GTK 小部件的声明性 DSL,灵感来自 React 和 JSX,使用虚拟 "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/。
依赖项
约15–24MB
约446K SLoC