Creando Controles Interactivos con GTK en Rust

rust Creando Controles Interactivos con GTK en Rust


En el mundo del desarrollo de interfaces gráficas (GUI) en Rust, GTK es una de las opciones más potentes y maduras gracias a sus bindings oficiales en gtk-rs. Este artículo explora cómo implementar controles básicos como botones, etiquetas y deslizadores, permitiendo crear aplicaciones interactivas de manera eficiente y segura.

¿Por qué GTK en Rust?


Instalación y Configuración

Primero, agrega las dependencias en tu Cargo.toml:

[dependencies]
gtk = { version = "0.8", features = ["v4_12"] }
gio = { version = "0.8", features = ["v2_90"] }

Ejecuta cargo build. En Linux, instala las dependencias del sistema con sudo apt install libgtk-4-dev (o equivalente).

Ejemplo Básico: Ventana con Botón y Etiqueta

Creemos una ventana simple donde un botón actualice una etiqueta.

use gtk::prelude::*;
use gtk::{Application, ApplicationWindow, Button, Label};

fn main() {
    let app = Application::builder()
        .application_id("com.ejemplo.gtk-rust")
        .build();

    app.connect_activate(build_ui);
    app.run();
}

fn build_ui(app: &Application) {
    let window = ApplicationWindow::builder()
        .application(app)
        .title("Controles GTK en Rust")
        .build();

    let label = Label::new(Some("¡Hola, Rust!"));
    let button = Button::with_label("Haz clic");

    button.connect_clicked(move |_| {
        label.set_label("¡Botón presionado!");
    });

    window.set_child(Some(&button));
    window.set_child(Some(&label));
    window.present();
}

Este código crea una ventana con un botón que cambia el texto de la etiqueta al hacer clic.

Agregando Más Controles: Deslizador y Campo de Texto

Usemos un Scale (deslizador) para controlar un valor y un Entry para entrada de texto.

use gtk::{Box, Entry, Scale};

// Dentro de build_ui:
let vbox = Box::new(gtk::Orientation::Vertical, 10);

let entry = Entry::new();
let scale = Scale::with_range(gtk::Orientation::Horizontal, 0.0, 100.0, 1.0);

scale.connect_value_changed(move |s| {
    entry.set_text(&format!("Valor: {:.0}", s.value()));
});

vbox.append(&entry);
vbox.append(&scale);
window.set_child(Some(&vbox));


Manejo de Eventos Avanzado

Conecta señales como changed o clicked usando closures con ownership seguro gracias a Rust.

Conclusión

GTK en Rust ofrece un equilibrio perfecto entre potencia y simplicidad para GUIs. Experimenta con widgets como ComboBox o TreeView para apps más complejas. ¡Comparte tus proyectos en los comentarios!

Comentarios
¿Quieres comentar?

Inicia sesión con Telegram para participar en la conversación


Comentarios (0)

Aún no hay comentarios. ¡Sé el primero en comentar!

Iniciar Sesión