40 个版本
0.9.0 | 2024 年 7 月 12 日 |
---|---|
0.8.1 | 2024 年 3 月 13 日 |
0.7.1 | 2024 年 3 月 14 日 |
0.7.0-beta.2 | 2023 年 10 月 14 日 |
0.4.0-beta.2 | 2021 年 11 月 26 日 |
#14 in GUI
10,029 每月下载次数
用于 21 个 包(14 个直接使用)
385KB
8K SLoC
一个受 Elm 启发并基于 Elm 和 gtk4-rs 的惯用 GUI 库。Relm4 是重新从头开始构建的 relm 的新版本,与 GTK4 和 libadwaita 兼容。
为什么选择 Relm4
我们相信 GUI 开发应该是简单、高效且愉快的。
gtk4-rs 包已经提供了您编写现代、美观且跨平台应用程序所需的一切。在基础之上,Relm4 使开发更加惯用、简单和快速,并让您在几小时内就能变得高效。
我们的目标
- ⏱️ 效率
- ✨ 简单性
- 📎 出色的文档
- 🔧 可维护性
文档
依赖关系
Relm4 依赖于 GTK4: 如何安装 GTK4 和 Rust
生态系统
- relm4-macros - 用于声明性 UI 定义的几个宏。
- relm4-components - 一系列可重用的组件。
- relm4-icons - 为您的应用程序提供的图标。
- relm4-template - 用于创建 Flatpak 格式 Relm4 应用程序的起始模板。
- relm4-snippets - 用于加快您开发的代码片段。
将此添加到您的 Cargo.toml
# Core library
relm4 = "0.9"
# Optional: reusable components
relm4-components = "0.9"
# Optional: icons (more info at https://github.com/Relm4/icons)
relm4-icons = "0.9.0"
特性
relm4
包有四个特性标志
标志 | 用途 | 默认 |
---|---|---|
macros |
通过重新导出 relm4-macros 启用宏 |
✅ |
libadwaita |
改进对 libadwaita 的支持 | - |
libpanel |
改进对 libpanel 的支持 | - |
gnome_46 |
启用所有依赖项的所有版本功能标志,以匹配GNOME 46 SDK | - |
gnome_45 |
启用所有依赖项的所有版本功能标志,以匹配GNOME 45 SDK | - |
gnome_44 |
启用所有依赖项的所有版本功能标志,以匹配GNOME 44 SDK | - |
gnome_43 |
启用所有依赖项的所有版本功能标志,以匹配GNOME 43 SDK | - |
gnome_42 |
启用所有依赖项的所有版本功能标志,以匹配GNOME 42 SDK | ✅ |
宏
特性是默认特性。
示例
在examples/中有几个示例应用程序。
📸 示例应用程序的截图
一个简单的计数器应用程序
use gtk::prelude::*;
use relm4::prelude::*;
struct App {
counter: u8,
}
#[derive(Debug)]
enum Msg {
Increment,
Decrement,
}
#[relm4::component]
impl SimpleComponent for App {
type Init = u8;
type Input = Msg;
type Output = ();
view! {
gtk::Window {
set_title: Some("Simple app"),
set_default_size: (300, 100),
gtk::Box {
set_orientation: gtk::Orientation::Vertical,
set_spacing: 5,
set_margin_all: 5,
gtk::Button {
set_label: "Increment",
connect_clicked => Msg::Increment,
},
gtk::Button {
set_label: "Decrement",
connect_clicked => Msg::Decrement,
},
gtk::Label {
#[watch]
set_label: &format!("Counter: {}", model.counter),
set_margin_all: 5,
}
}
}
}
// Initialize the component.
fn init(
counter: Self::Init,
root: Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let model = App { counter };
// Insert the code generation of the view! macro here
let widgets = view_output!();
ComponentParts { model, widgets }
}
fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
match msg {
Msg::Increment => {
self.counter = self.counter.wrapping_add(1);
}
Msg::Decrement => {
self.counter = self.counter.wrapping_sub(1);
}
}
}
}
fn main() {
let app = RelmApp::new("relm4.example.simple");
app.run::<App>(0);
}
使用Relm4的项目
- fm — 一个小型通用文件管理器。
- Done - 一个简单且通用的待办事项应用程序。
- Reovim - neovim的GUI前端。
- NixOS配置编辑器 - NixOS的图形配置编辑器。
- Rhino Setup - Rolling Rhino的设置向导。
- Lemoa - Lemmy的桌面客户端。
- Score Tracker - 用于跟踪卡牌和桌面游戏玩家得分的应用程序。
许可证
根据您的选择,许可方式为以下之一
- Apache许可证2.0版本,(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的您提交的任何有意贡献的工作,将如上所述双重许可,不附加任何额外条款或条件。
欢迎反馈和贡献!
依赖关系
~18-28MB
~505K SLoC