Crate gtk4[−][src]
Expand description
Rust GTK 4 bindings
This library contains safe Rust bindings for GTK 4, a multi-platform GUI toolkit. It is a part of gtk-rs.
Most of this documentation is generated from the C API. Until all parts of the documentation have been reviewed there will be incongruities with the actual Rust API.
For a gentle introduction to gtk-rs we recommend the online book GUI development with Rust and GTK 4.
See also
“Hello, World!” example program
GTK needs to be initialized before use by calling init()
. Creating an
Application
will call init()
for you.
The gtk4
crate is usually renamed to gtk
. You can find an example in
the features section for how to do this globally in your Cargo.toml
.
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 window = ApplicationWindow::builder() .application(app) .default_width(320) .default_height(200) .title("Hello, World!") .build(); // Show the window. window.show(); }); app.run(); }
The main loop
In a typical GTK application you set up the UI, assign signal handlers and run the main event loop.
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.set_child(Some(&button)); window.show(); }); application.run(); }
Threads
GTK is not thread-safe. Accordingly, none of this crate’s structs implement
Send
or Sync
.
The thread where init()
was called is considered the main thread. OS X has
its own notion of the main thread and init()
must be called on that thread.
After successful initialization, calling any gtk
or gdk
functions
(including init()
) from other threads will panic
.
Any thread can schedule a closure to be run by the main loop on the main
thread via glib::idle_add()
or glib::timeout_add()
. While
working with GTK you might need the glib::idle_add_local()
or glib::timeout_add_local()
version without the
Send
bound. Those may only be called from the main thread.
Panics
The gtk
and gdk
crates have some run-time safety and contract checks.
-
Any constructor or free function will panic if called before
init()
or on a non-main thread. -
Any
&str
or&Path
parameter with an interior null (\0
) character will cause a panic. -
Some functions will panic if supplied out-of-range integer parameters. All such cases will be documented individually but they are not yet.
-
A panic in a closure that handles signals or in any other closure passed to a
gtk
function will abort the process.
Features
Library versions
By default this crate provides only GTK 4.0 APIs. You can access additional
functionality by selecting one of the v4_2
, v4_4
, etc. features.
Cargo.toml
example:
[dependencies.gtk]
package = "gtk4"
version = "0.x.y"
features = ["v4_2"]
Take care when choosing the version to target: some of your users might not have easy access to the latest ones. The higher the version, the fewer users will have it installed.
Re-exports
pub use ffi; | |
pub use cairo; | |
pub use gdk; | |
pub use gdk_pixbuf; | |
pub use gio; | |
pub use glib; | |
pub use graphene; | |
pub use gsk; | |
pub use pango; |
Modules
functions | |
prelude | Traits intended for blanket imports. |
subclass |
Structs
Enums
Constants
Statics
Functions
Type Definitions
Allocation |