Noções Básicas de GUI
8 exemplos para você começar com desenvolvimento de GUI desktop em Rust - 6 básicos e 2 intermediários.
Busque em todas as páginas da documentação
8 exemplos para você começar com desenvolvimento de GUI desktop em Rust - 6 básicos e 2 intermediários.
# Caminho do Tauri
npm create tauri-app@latest
# Caminho do egui
cargo add eframe egui
# Caminho do iced
cargo add icedFerramentas: Os exemplos de backend visam Rust 1.97.0 (edição 2024). O Tauri também precisa do Node para a cadeia de ferramentas frontend.
UI de modo imediato em um aplicativo eframe.
fn main() -> eframe::Result<()> {
eframe::run_native(
"Hello egui",
eframe::NativeOptions::default(),
Box::new(|_cc| Ok(Box::new(MyApp::default()))),
)
}
#[derive(Default)]
struct MyApp {}
impl eframe::App for MyApp {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| {
ui.label("Hello from Rust GUI");
});
}
}update é executado a cada frame - mantenha o trabalho leve ou use o perfilador de CPU.winit sob o eframe.Relacionado: egui
O enum Message no estilo Elm impulsiona as atualizações.
use iced::widget::{button, column, text, Column};
use iced::Element;
#[derive(Debug, Clone)]
enum Message {
Increment,
}
fn view(count: &i32) -> Element<Message> {
column![
text(format!("Count: {count}")),
button("+").on_press(Message::Increment),
]
.into()
}view pura mapeia o estado para widgets.update aplica mensagens imutavelmente - padrão de reducer testável.Relacionado: iced
Comando Rust que pode ser chamado da UI JavaScript.
#[tauri::command]
fn greet(name: &str) -> String {
format!("Hello, {name}!")
}Relacionado: Tauri
Arc<Mutex<_>> no TauriVários comandos modificando o estado compartilhado do aplicativo.
use std::sync::Mutex;
use tauri::State;
struct AppState {
counter: Mutex<i32>,
}
#[tauri::command]
fn increment(state: State<AppState>) -> i32 {
let mut c = state.counter.lock().unwrap();
*c += 1;
*c
}State<T> gerencia o tempo de vida entre invocações.tokio::sync::Mutex em comandos assíncronos para evitar bloquear o runtime assíncrono.Relacionado: Estado & Arquitetura
Delegue a seleção do sistema de arquivos para APIs do sistema operacional via plugin ou crate rfd.
fn pick_file() -> Option<std::path::PathBuf> {
rfd::FileDialog::new().pick_file()
}tauri.conf.json.Relacionado: Integração Nativa
Aplicativos desktop precisam de sair, preferências e comportamento em segundo plano.
tauri::menu e de bandeja no hook de configuração Rust.Relacionado: Integração Nativa
Carrega a configuração na inicialização, salva em caso de alteração com serde JSON.
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Default)]
struct Settings {
dark_mode: bool,
}Relacionado: Estado & Arquitetura
Envie .app, .msi ou .deb com ícones e metadados.
cargo tauri build
# ou cargo install cargo-bundle && cargo bundleRelacionado: Empacotamento & Distribuição
Versões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4 e Polars 0.46+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026