Crate gtk[][src]

Expand description

Rust GTK 3 bindings

This library contains safe Rust bindings for GTK 3, a multi-platform GUI toolkit. It is a part of gtk-rs.

GTK 3.18 is the lowest supported version for the underlying library.

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.

See also

“Hello, World!” example program

GTK needs to be initialized before use by calling init. Creating an Application will call init for you.

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();
}

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

        window.show_all();
    });

    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 3.18 APIs. You can access additional functionality by selecting one of the v3_20, v3_24, etc. features.

Cargo.toml example:

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

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 atk;
pub use cairo;
pub use gdk;
pub use gdk_pixbuf;
pub use gio;
pub use glib;
pub use pango;

Modules

Traits and essential types intended for blanket imports.

Structs

A builder-pattern type to construct AboutDialog objects.

A builder-pattern type to construct AccelLabel objects.

A builder-pattern type to construct ActionBar objects.

A builder-pattern type to construct Adjustment objects.

A builder-pattern type to construct Application objects.

A builder-pattern type to construct AspectFrame objects.

A builder-pattern type to construct Assistant objects.

A builder-pattern type to construct Box objects.

A builder-pattern type to construct ButtonBox objects.

A builder-pattern type to construct Button objects.

A builder-pattern type to construct Calendar objects.

A builder-pattern type to construct CellAreaBox objects.

A builder-pattern type to construct CellView objects.

A builder-pattern type to construct CheckButton objects.

A builder-pattern type to construct ColorButton objects.

A builder-pattern type to construct ComboBox objects.

A builder-pattern type to construct ComboBoxText objects.

A builder-pattern type to construct Dialog objects.

A builder-pattern type to construct DrawingArea objects.

A builder-pattern type to construct Entry objects.

A builder-pattern type to construct EventBox objects.

A builder-pattern type to construct Expander objects.

A builder-pattern type to construct Fixed objects.

A builder-pattern type to construct FlowBox objects.

A builder-pattern type to construct FlowBoxChild objects.

A builder-pattern type to construct FontButton objects.

A builder-pattern type to construct Frame objects.

A builder-pattern type to construct GLArea objects.

A builder-pattern type to construct GestureDrag objects.

A builder-pattern type to construct GesturePan objects.

A builder-pattern type to construct GestureSwipe objects.

A builder-pattern type to construct GestureZoom objects.

A builder-pattern type to construct Grid objects.

A builder-pattern type to construct HeaderBar objects.

A builder-pattern type to construct IconView objects.

A builder for generating a Image.

A builder-pattern type to construct InfoBar objects.

Whether to propagate the signal to the default handler.

A builder-pattern type to construct Invisible objects.

A builder-pattern type to construct Label objects.

A builder-pattern type to construct Layout objects.

A builder-pattern type to construct LevelBar objects.

A builder-pattern type to construct LinkButton objects.

A builder-pattern type to construct ListBox objects.

A builder-pattern type to construct ListBoxRow objects.

A builder-pattern type to construct LockButton objects.

A builder-pattern type to construct MenuBar objects.

A builder-pattern type to construct Menu objects.

A builder-pattern type to construct MenuButton objects.

A builder-pattern type to construct MenuItem objects.

A builder-pattern type to construct ModelButton objects.

A builder-pattern type to construct Notebook objects.

A builder-pattern type to construct Overlay objects.

A builder-pattern type to construct Paned objects.

A builder-pattern type to construct Plug objects.

A builder-pattern type to construct Popover objects.

A builder-pattern type to construct PopoverMenu objects.

A builder-pattern type to construct ProgressBar objects.

A builder-pattern type to construct RadioButton objects.

A builder-pattern type to construct Revealer objects.

A builder-pattern type to construct Scale objects.

A builder-pattern type to construct ScaleButton objects.

A builder-pattern type to construct Scrollbar objects.

A builder-pattern type to construct SearchBar objects.

A builder-pattern type to construct SearchEntry objects.

A builder-pattern type to construct Separator objects.

A builder-pattern type to construct SizeGroup objects.

A builder-pattern type to construct Socket objects.

A builder-pattern type to construct SpinButton objects.

A builder-pattern type to construct Spinner objects.

A builder-pattern type to construct Stack objects.

A builder-pattern type to construct StackSidebar objects.

A builder for generating a StackSwitcher.

A builder-pattern type to construct Statusbar objects.

A builder-pattern type to construct StyleContext objects.

A builder-pattern type to construct Switch objects.

A builder-pattern type to construct TextBuffer objects.

A builder-pattern type to construct TextMark objects.

A builder-pattern type to construct TextTag objects.

A builder-pattern type to construct TextView objects.

A builder-pattern type to construct ToggleButton objects.

A builder-pattern type to construct ToolButton objects.

A builder-pattern type to construct ToolItem objects.

A builder-pattern type to construct ToolPalette objects.

A builder-pattern type to construct Toolbar objects.

A builder-pattern type to construct TreeView objects.

A builder-pattern type to construct Viewport objects.

A builder-pattern type to construct VolumeButton objects.

A builder-pattern type to construct Window objects.

Enums

Constants

Statics

Traits

Functions

Tries to initialize GTK+.

Returns true if GTK has been initialized.

Returns true if GTK has been initialized and this is the main thread.

Informs this crate that GTK has been initialized and the current thread is the main one.