40 个版本

0.9.0 2024 年 7 月 12 日
0.8.1 2024 年 3 月 13 日
0.7.1 2024 年 3 月 14 日
0.7.0-beta.22023 年 10 月 14 日
0.4.0-beta.22021 年 11 月 26 日

#14 in GUI

Download history 2162/week @ 2024-05-03 2044/week @ 2024-05-10 1794/week @ 2024-05-17 1836/week @ 2024-05-24 2386/week @ 2024-05-31 1955/week @ 2024-06-07 2422/week @ 2024-06-14 2132/week @ 2024-06-21 1851/week @ 2024-06-28 1502/week @ 2024-07-05 2086/week @ 2024-07-12 2692/week @ 2024-07-19 2521/week @ 2024-07-26 2417/week @ 2024-08-02 2463/week @ 2024-08-09 2223/week @ 2024-08-16

10,029 每月下载次数
用于 21 包(14 个直接使用)

Apache-2.0 OR MIT

385KB
8K SLoC

Relm4

CI Matrix Relm4 on crates.io Relm4 docs Relm4 book Minimum Rust version 1.75 dependency status

一个受 Elm 启发并基于 Elmgtk4-rs 的惯用 GUI 库。Relm4 是重新从头开始构建的 relm 的新版本,与 GTK4libadwaita 兼容。

为什么选择 Relm4

我们相信 GUI 开发应该是简单、高效且愉快的。
gtk4-rs 包已经提供了您编写现代、美观且跨平台应用程序所需的一切。在基础之上,Relm4 使开发更加惯用、简单和快速,并让您在几小时内就能变得高效。

我们的目标

  • ⏱️ 效率
  • 简单性
  • 📎 出色的文档
  • 🔧 可维护性

文档

依赖关系

Relm4 依赖于 GTK4: 如何安装 GTK4 和 Rust

生态系统

将此添加到您的 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/中有几个示例应用程序。

📸 示例应用程序的截图

一个简单的计数器应用程序

Simple app screenshot light Simple app screenshot dark

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许可证定义的您提交的任何有意贡献的工作,将如上所述双重许可,不附加任何额外条款或条件。

欢迎反馈和贡献!

依赖关系

~18-28MB
~505K SLoC