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 日 |
760 在 GUI
175,707 每月下载量
用于 431 个包 (213 个直接使用)
6.5MB
172K SLoC
Rust GTK 3 绑定
Rust 对 GTK 3 的绑定和包装,是 gtk3-rs 的一个多平台 GUI 工具包的一部分,gtk3-rs。
GTK 3.22.30 是底层库支持的最低版本。
最低支持的 Rust 版本
目前,最低支持的 Rust 版本是 1.70.0
。
构建
gtk 需要在您的系统上安装 GTK、GLib 和 Cairo 开发文件。请参阅 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 不是线程安全的。因此,此包中的任何结构体都没有实现 Send
或 Sync
。
调用 [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
] 之前或非主线程上调用时都会引发恐慌。 -
一些函数在提供范围之外的整数参数时将引发恐慌。所有这些情况将单独记录,但尚未记录。
-
处理信号或传递给
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