33 个版本
0.9.0 | 2024 年 7 月 10 日 |
---|---|
0.8.1 | 2024 年 3 月 7 日 |
0.7.3 | 2023 年 9 月 23 日 |
0.7.0 |
|
0.0.0 | 2019 年 7 月 25 日 |
#29 in GUI
57,378 每月下载量
用于 109 个 crate(93 个直接使用)
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 的任何结构体都没有实现 Send
或 Sync
。
调用 init
的线程被视为主线程。OS X 有其自己的主线程概念,并且必须在那个线程上调用 init
。初始化成功后,从其他线程调用任何 gtk
或 gdk
函数(包括 init
)将会导致 panic
。
任何线程都可以通过 glib::idle_add
或 glib::timeout_add
将闭包安排在主线程上运行。当使用 GTK 时,您可能需要 glib::idle_add_local
或 glib::timeout_add_local
。
有关更多信息,请参阅以下部分:
gtk
和 gdk
模块具有一些运行时安全和合同检查。
-
任何构造函数或自由函数如果在使用前没有调用
init
或在非主线程上调用将会导致 panic。 -
任何带有内部空字符(
0
)的&str
或&Path
参数将导致 panic。 -
一些函数会在提供范围之外的整型参数时 panic。所有这些情况都将单独记录,但尚未记录。
-
在处理信号或传递给
gtk
函数的任何闭包中发生的 panic 将会导致进程终止。
功能
库版本
默认情况下,此crate仅提供 GTK 4.0 API。您可以通过选择 v4_2
、v4_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