33 个版本

0.9.0 2024 年 7 月 10 日
0.8.1 2024 年 3 月 7 日
0.7.3 2023 年 9 月 23 日
0.7.0 2023 年 7 月 23 日
0.0.0 2019 年 7 月 25 日

#29 in GUI

Download history 14145/week @ 2024-05-04 10918/week @ 2024-05-11 10108/week @ 2024-05-18 10740/week @ 2024-05-25 11928/week @ 2024-06-01 12327/week @ 2024-06-08 14349/week @ 2024-06-15 12393/week @ 2024-06-22 9738/week @ 2024-06-29 11121/week @ 2024-07-06 12229/week @ 2024-07-13 15713/week @ 2024-07-20 14297/week @ 2024-07-27 13065/week @ 2024-08-03 14527/week @ 2024-08-10 12987/week @ 2024-08-17

57,378 每月下载量
用于 109 个 crate(93 个直接使用)

MIT 许可证

7MB
180K SLoC

Rust GTK 4 绑定

项目网站在此:这里

GTK 4 的 Rust 绑定,是 gtk4-rs 的一部分。

这个库包含对 GTK 4 的安全 Rust 绑定,GTK 4 是一个跨平台的 GUI 工具包。它是 gtk-rs 的一部分。

大部分文档是从 C API 生成的。在所有文档部分都经过审查之前,文档中可能存在与实际 Rust API 不一致的地方。

为了温和地介绍 gtk-rs,我们推荐阅读在线书籍 Rust 和 GTK 4 进行 GUI 开发

另请参阅

最低支持的 Rust 版本

目前,最低支持的 Rust 版本是 1.70

"Hello, World!" 示例程序

在使用之前,GTK 需要通过调用 [init][fn@init] 进行初始化。创建一个 [Application][struct@Application] 将为您调用 [init][fn@init]。

gtk4 crate 通常重命名为 gtk。您可以在 特性 部分找到如何全局在您的 Cargo.toml 中执行此操作的示例。

use gtk4 as gtk;
use gtk::prelude::*;
use gtk::{glib, Application, ApplicationWindow};

fn main() -> glib::ExitCode {
    let app = Application::builder()
        .application_id("org.example.HelloWorld")
        .build();

    app.connect_activate(|app| {
        // We create the main window.
        let window = ApplicationWindow::builder()
            .application(app)
            .default_width(320)
            .default_height(200)
            .title("Hello, World!")
            .build();

        // Show the window.
        window.present();
    });

    app.run()
}

主循环

在典型的 GTK 应用程序中,您设置 UI、分配信号处理程序并运行主事件循环。

use gtk4 as gtk;
use gtk::prelude::*;
use gtk::{glib, Application, ApplicationWindow, Button};

fn main() -> glib::ExitCode {
    let application = Application::builder()
        .application_id("com.example.FirstGtkApp")
        .build();

    application.connect_activate(|app| {
        let window = ApplicationWindow::builder()
            .application(app)
            .title("First GTK Program")
            .default_width(350)
            .default_height(70)
            .build();

        let button = Button::with_label("Click me!");
        button.connect_clicked(|_| {
            eprintln!("Clicked!");
        });
        window.set_child(Some(&button));

        window.present();
    });

    application.run()
}

线程

GTK 不是线程安全的。因此,这个 crate 的任何结构体都没有实现 SendSync

调用 init 的线程被视为主线程。OS X 有其自己的主线程概念,并且必须在那个线程上调用 init。初始化成功后,从其他线程调用任何 gtkgdk 函数(包括 init)将会导致 panic

任何线程都可以通过 glib::idle_addglib::timeout_add 将闭包安排在主线程上运行。当使用 GTK 时,您可能需要 glib::idle_add_localglib::timeout_add_local

有关更多信息,请参阅以下部分:

gtkgdk 模块具有一些运行时安全和合同检查。

  • 任何构造函数或自由函数如果在使用前没有调用 init 或在非主线程上调用将会导致 panic。

  • 任何带有内部空字符(0)的 &str&Path 参数将导致 panic。

  • 一些函数会在提供范围之外的整型参数时 panic。所有这些情况都将单独记录,但尚未记录。

  • 在处理信号或传递给 gtk 函数的任何闭包中发生的 panic 将会导致进程终止。

功能

库版本

默认情况下,此crate仅提供 GTK 4.0 API。您可以通过选择 v4_2v4_4 等. 功能来访问附加功能。

Cargo.toml 示例

[dependencies.gtk]
package = "gtk4"
version = "0.x.y"
features = ["v4_2"]

请注意选择要针对的版本:一些用户可能无法轻松访问最新版本。版本越高,拥有该版本的用户就越少。

文档

使用方法

我们建议使用来自 crates.io 的 crate,如这里所示。

如果您想跟踪最新版本,请使用git依赖项

[dependencies]
gtk = { git = "https://github.com/gtk-rs/gtk4-rs.git", package = "gtk4" }

请避免混合使用版本控制和git的crate,例如

# This will not compile
[dependencies]
gdk = {version = "0.1", package = "gdk4"}
gtk = { git = "https://github.com/gtk-rs/gtk4-rs.git", package = "gtk4" }

功能

功能 描述
v4_16 启用GTK 4.16的新API部分
v4_14 启用GTK 4.14的新API部分
v4_12 启用GTK 4.12的新API部分
v4_10 启用GTK 4.10的新API部分
v4_8 启用GTK 4.8的新API部分
v4_6 启用GTK 4.6的新API部分
v4_4 启用GTK 4.4的新API部分
v4_2 启用GTK 4.2的新API部分
gnome_47 启用此crate及其依赖项的所有版本功能标志,以匹配GNOME 47 SDK
gnome_46 启用此crate及其依赖项的所有版本功能标志,以匹配GNOME 46 SDK
gnome_45 启用此crate及其依赖项的所有版本功能标志,以匹配GNOME 45 SDK
gnome_44 启用此crate及其依赖项的所有版本功能标志,以匹配GNOME 44 SDK
gnome_43 启用此crate及其依赖项的所有版本功能标志,以匹配GNOME 43 SDK
gnome_42 启用此crate及其依赖项的所有版本功能标志,以匹配GNOME 42 SDK
unsafe-assume-initialized 禁用对gtk初始化的检查,用于C ABI库
xml_validation 启用gtk4-macros的xml_validation功能
blueprint 启用gtk4-macros的blueprint功能

参见

许可证

gtk4的Rust绑定可在MIT许可证下使用,请参阅。

依赖项

~8–17MB
~256K SLoC