I've been wanting to get my feet wet with GUI programming using Rust, and I finally found a simple enough tool to do so; it's found at Rust GUI Programming.
I'm doing this on a Debian 12 GNU/Linux Box, with Cinnamon as my Desktop. Whereas the Beginner's First GUI Using Rust, on Debian, Using Dioxus Labs Tooling uses a third-party crate from Dioxus Labs, this version using a more standard GTK approach. You may be somewhat aware that much of the GUI work in Linux is based on either the GTK framework or the Qt framework; this is GTK-based.
Install Rust, and make sure you can compile and run a simple "Hello, World" program.
$ cargo new --bin second_gui_gtk
(The --bin
is optional; it's assumed if not given.)
Add the GTK Dependency to Crate.toml
$ cargo add gtk
Then edit the src/main.rs
file to the following:
use gtk::prelude::*; use gtk::{Window, WindowType}; fn main() { gtk::init().expect("Failed to initialize GTK."); // This initializes the GTK (GIMP Tool Kit). // If something goes wrong, the program crashes with the failure message. let window = Window::new(WindowType::Toplevel); // This creates, but does not yet draw, a window. window.show_all(); // This does the actual drawing of the window. gtk::main(); // This begins the main loop, where the program just sits watching for "events", like a button-click. // Your job now is to figure out how to exit the program. } // end of main()
And run the program to display a blank window. Simple.
$ cargo run
You'll find that when you close the window, it does not stop the program. For now, just press Ctrl-C to stop the program.
use gtk::prelude::*; use gtk::{Button, Window, WindowType}; fn main() { gtk::init().expect("Failed to initialize GTK."); // Initializes the GTK (GIMP Tool Kit), with error and crash if it fails. let window = Window::new(WindowType::Toplevel); // This creates, but does not yet draw, a window.let button = Button::with_label("Click me!"); // This creates, but does not yet draw, a button. window.add(&button); // This adds the button to the window. window.show_all(); // This does the actual drawing of the windowand button . gtk::main();// This begins the main loop, where the program just sits watching for "events", like a button-click. // Your job now is to figure out how to exit the program, and how to respond to the button-click . } // end of main()
Again, closing the window does not stop the program, and clicking on this button does not do anything, but you've now started creating a GUI app with GTK from Rust on Debian.
use gtk::prelude::*; use gtk::{Button, Window, WindowType};use std::process; fn main() { gtk::init().expect("Failed to initialize GTK."); // Initializes the GTK (GIMP Tool Kit), with error and crash if it fails. let window = Window::new(WindowType::Toplevel); // This creates, but does not yet draw, a window. let button = Button::with_label("Click meto Exit !"); // This creates, but does not yet draw, a button.button.connect_clicked(move |_| { process::exit(1); }); window.add(&button); // This adds the button to the window. window.show_all(); // This does the actual drawing of the window and button. gtk::main();// This begins the main loop, where the program just sits watching for "events", like a button-click.// Your job now is to figure out how to exit the program, and how to respond to the button-click.} // end of main()