38 个版本

0.18.1 2023 年 9 月 3 日
0.17.1 2023 年 3 月 23 日
0.16.2 2022 年 11 月 28 日
0.15.5 2022 年 4 月 26 日
0.0.3 2015 年 7 月 18 日

760GUI

Download history 43716/week @ 2024-04-22 43593/week @ 2024-04-29 41883/week @ 2024-05-06 42091/week @ 2024-05-13 41401/week @ 2024-05-20 41707/week @ 2024-05-27 41991/week @ 2024-06-03 36889/week @ 2024-06-10 39359/week @ 2024-06-17 39986/week @ 2024-06-24 39263/week @ 2024-07-01 38876/week @ 2024-07-08 39456/week @ 2024-07-15 42221/week @ 2024-07-22 43573/week @ 2024-07-29 46089/week @ 2024-08-05

175,707 每月下载量
用于 431 个包 (213 个直接使用)

MIT 许可证

6.5MB
172K SLoC

Rust GTK 3 绑定

项目网站

RustGTK 3 的绑定和包装,是 gtk3-rs 的一个多平台 GUI 工具包的一部分,gtk3-rs。

GTK 3.22.30 是底层库支持的最低版本。

最低支持的 Rust 版本

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

构建

gtk 需要在您的系统上安装 GTKGLibCairo 开发文件。请参阅 GTK 安装页面

使用

我们建议使用 crates.io 上的包,如这里所示 使用说明

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

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

避免混合版本和 git 包,如下所示

# This will not compile
[dependencies]
gtk = "0.13"
gtk = { git = "https://github.com/gtk-rs/gtk3-rs.git" }

"Hello, World!" 示例程序

//! GTK 需要先通过调用 [fn@init] 进行初始化才能使用。创建一个 [struct@Application] 将会为您调用 [fn@init]

use gtk::prelude::*;
use gtk::{Application, ApplicationWindow};

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

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

        // Don't forget to make all widgets visible.
        win.show_all();
    });

    app.run();
}

主循环

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


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

fn main() {
    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.add(&button);

        window.show_all();
    });

    application.run();
}

线程

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

调用 [fn@init] 的线程被视为主线程。OS X 有它自己的主线程概念,并且 [fn@init] 必须在该线程上调用。初始化成功后,从其他线程调用任何 gtk 或 [mod@gdk] 函数(包括 [fn@init])将引发 panic

任何线程都可以通过 [fn@glib::idle_add] 或 [fn@glib::timeout_add] 将闭包调度为主线程运行。在处理 GTK 时,您可能需要不带 Send 绑定的 [fn@glib::idle_add_local] 或 [fn@glib::timeout_add_local] 版本。这些只能从主线程调用。

恐慌

gtk 和 [mod@gdk] 包具有一些运行时安全和合同检查。

  • 任何构造函数或自由函数在 [fn@init] 之前或非主线程上调用时都会引发恐慌。

  • 任何包含内部空字符(\0)的 &str&Path 参数将引发恐慌。

  • 一些函数在提供范围之外的整数参数时将引发恐慌。所有这些情况将单独记录,但尚未记录。

  • 处理信号或传递给 gtk 函数的任何闭包中的恐慌将终止进程。

特性

库版本

默认情况下,此包只提供 GTK 3.22.30 API。您可以通过选择 v3_24 等功能之一来访问附加功能。

Cargo.toml 示例

[dependencies.gtk]
version = "0.x.y"
features = ["v3_24"]

在选择目标版本时要小心:一些用户可能无法轻松访问最新的版本。版本越高,拥有该版本的用户越少。

文档

大部分文档是从 C API 生成的。

在所有文档部分都经过审查之前,将存在与实际 Rust API 之间的不一致。

生成文档

> RUSTFLAGS="--cfg docsrs" cargo doc

(如果安装的 GTK+ 版本低于 3.16,则相应调整功能名称)。

贡献

欢迎贡献者!

请参阅一般的 绑定文档

大多数绑定(src/auto)是由gir使用此配置文件生成的。编辑Gir.toml后,可以使用以下方式重新生成源代码:

> make gir

在提交PR时,请将更改放入src/auto目录下的单独提交中。

您还可以运行cargo clippy -- -D warnings并检查您是否干净,否则在CI失败时可能会感到意外。

参见

但还有

许可

gtk 可在MIT许可下使用,请参阅。

依赖项

~11MB
~231K SLoC