Prüfstand: Die Beispielprojekte wurden noch nicht mit Cargo und als GUI verifiziert. Sie sind Lernmaterial; ihre Ausführbarkeit ist noch zu prüfen.
Teil 19 – Menüs und Tastenkürzel
Lernziel: Grundgerüst einer professionellen Anwendung.
Voraussetzung: Rust Desktop – Teil 18.
Dauer: etwa 20–35 Minuten einschließlich eigener Übung.
Worum geht es?
TopBottomPanel, MenuBar und Eingaben. Die Lektion verwendet eine kleine, überschaubare Desktop-Anwendung, die du selbst startest, veränderst und testest. Die folgenden Schritte sind auf Windows und Linux übertragbar.
Das solltest du verstehen
Menüs bündeln Aktionen. Für Tastenkürzel ist die Eventverarbeitung wichtig; die Aktion selbst sollte nur einmal als Methode implementiert sein.
Projekt vorbereiten
Im Kursarchiv befindet sich ein vollständiges Cargo-Projekt unter beispielprojekte/teil-19/. Öffne den Ordner mit VS Code oder wechsle im Terminal hinein.
cd beispielprojekte/teil-19
cargo run
Es werden die im jeweiligen Cargo.toml festgelegten Abhängigkeiten benötigt. Die erste Kompilierung kann länger dauern. Kopiere für Experimente das Projekt in einen eigenen Arbeitsordner.
Cargo.toml
[package]
name = "rust_desktop_teil_19"
version = "0.1.0"
edition = "2024"
[dependencies]
eframe = "=0.37.0"
Vollständiges Beispiel (src/main.rs)
use eframe::egui;
#[derive(Default)]
struct DemoApp {
status: String,
}
impl eframe::App for DemoApp {
fn ui(&mut self, ui: &mut egui::Ui, _frame: &mut eframe::Frame) {
egui::MenuBar::new().ui(ui, |ui| {ui.menu_button("Datei", |ui| {if ui.button("Neu").clicked(){self.status="Neues Projekt".into(); ui.close();}}); ui.menu_button("Hilfe", |ui| {if ui.button("Über").clicked(){self.status="Know-How-Schmiede".into();ui.close();}});});
ui.label(&self.status);
}
}
fn main() -> eframe::Result {
eframe::run_native(
"Rust Desktop – Lektion 19",
eframe::NativeOptions::default(),
Box::new(|_cc| Ok(Box::<DemoApp>::default())),
)
}
Schrittweise ausprobieren
- Starte das Beispiel mit
cargo runund beobachte, welche Elemente im Fenster erscheinen. - Suche im Quelltext die Felder von
DemoApp. Diese Daten bilden den Zustand der Anwendung. - Suche nach
impl eframe::Appund der Methodeui(). Dort wird festgelegt, was die Anwendung anzeigt. - Ändere zunächst nur einen Text oder Zahlenwert und starte die Anwendung erneut.
- Vergleiche anschließend das Verhalten nach einer Benutzereingabe mit dem gespeicherten Zustand.
Kontrollfrage: Was würde passieren, wenn du einen wichtigen Wert als lokale Variable innerhalb von ui() neu initialisierst, statt ihn in DemoApp zu speichern?
Übungsaufgabe
Ergänze einen Hilfe-Menüpunkt.
Versuche die Änderung zunächst ohne Musterlösung. Lies Compiler-Fehlermeldungen vollständig und prüfe zuerst die betroffene Zeile.
Musterlösung / Lösungshinweis anzeigen
Die vollständige Ausgangslösung steht im zugehörigen Cargo-Projekt. Für die Erweiterung gehst du so vor:
- Lege gegebenenfalls ein zusätzliches Feld in
DemoAppan. - Ergänze das passende Widget oder die Verzweigung in
ui(). - Übernimm nur gültige Eingabewerte und zeige Fehler verständlich an.
- Teste mindestens den normalen Ablauf und einen Grenzfall.
Erfolgskriterium: Die geforderte Änderung ist nach der Interaktion im Fenster sichtbar und verursacht keinen Absturz.
Typische Probleme
cargowird nicht gefunden: Prüfe die Rust-Installation und starte das Terminal neu.- Abhängigkeiten laden nicht: Prüfe Internetverbindung und Versionsangaben in
Cargo.toml. - Ein Compilerfehler erscheint: Kontrolliere die betroffene Zeile, Klammern und Datentypen; vermeide reflexhaft
unwrap(). - Die Änderung verschwindet: Ein zustandsrelevanter Wert gehört wahrscheinlich in
DemoApp. - Linux öffnet kein Fenster: Prüfe installierte Grafik- und Entwicklungspakete für die verwendete Distribution.
Wissenscheck
- Kannst du in eigenen Worten erklären, was dieses Beispiel demonstriert?
- Welche Daten werden in
DemoAppgespeichert und warum? - Was unterscheidet eine Benutzereingabe von einer rein grafischen Anzeige?
- Wie würdest du die Funktion ohne Hilfestellung erweitern?
Weiterlernen
← Vorherige Lektion · Kursübersicht · Nächste Lektion →
Know-How-Schmiede · Rust Desktop-Kurs. Die Beispielprojekte sind Lernmaterial und sollten vor der Veröffentlichung lokal mit deiner Werkzeugkette geprüft werden.
