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
&stror&Pathparameter 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
gtkfunction 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 |