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 20 – Dialoge und zusätzliche Fenster
Lernziel: Dialogfenster erstellen.
Voraussetzung: Rust Desktop – Teil 19.
Dauer: etwa 20–35 Minuten einschließlich eigener Übung.
Worum geht es?
egui::Window und offene Zustände. 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
Ein zusätzliches egui::Window ist zunächst ein Fenster innerhalb der egui-Anwendung. Für separate native OS-Fenster sind zusätzliche Viewports nötig.
Projekt vorbereiten
Im Kursarchiv befindet sich ein vollständiges Cargo-Projekt unter beispielprojekte/teil-20/. Öffne den Ordner mit VS Code oder wechsle im Terminal hinein.
cd beispielprojekte/teil-20
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_20"
version = "0.1.0"
edition = "2024"
[dependencies]
eframe = "=0.37.0"
Vollständiges Beispiel (src/main.rs)
use eframe::egui;
#[derive(Default)]
struct DemoApp {
show_settings: bool,
}
impl eframe::App for DemoApp {
fn ui(&mut self, ui: &mut egui::Ui, _frame: &mut eframe::Frame) {
if ui.button("Einstellungen öffnen").clicked() {self.show_settings=true;}
egui::Window::new("Einstellungen").open(&mut self.show_settings).show(ui.ctx(), |ui| {ui.label("Zusätzliches Fenster");});
}
}
fn main() -> eframe::Result {
eframe::run_native(
"Rust Desktop – Lektion 20",
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 Info-Dialog.
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.
