Complete GUI Examples¶
Comprehensive GUI application examples.
Hello GUI¶
The simplest possible GUI app:
gui_init("com.example.hello");
let window = gui_window("Hello GUI", 300, 200);
let label = gui_label("Hello, World!");
gui_add(window, label);
gui_run();
Interactive Greeting¶
gui_init("com.example.greet");
let window = gui_window("Greeting App", 400, 200);
let box = gui_box("vertical", 10);
let label1 = gui_label("Enter your name:");
let entry = gui_entry("Name");
let button = gui_button("Greet");
let result = gui_label("");
fn greet() {
let name = gui_get_text(entry);
let message = "Hello, #{name}!";
gui_set_text(result, message);
}
gui_on(button, "clicked", "greet");
gui_add(box, label1);
gui_add(box, entry);
gui_add(box, button);
gui_add(box, result);
gui_add(window, box);
gui_run();
Counter with Reset¶
gui_init("com.example.counter");
let window = gui_window("Counter", 300, 200);
let box = gui_box("vertical", 10);
let display = gui_label("Count: 0");
let button_row = gui_box("horizontal", 5);
let btn_inc = gui_button("+");
let btn_dec = gui_button("-");
let btn_reset = gui_button("Reset");
let count = 0;
fn increment() {
count = count + 1;
gui_set_text(display, "Count: #{count}");
}
fn decrement() {
count = count - 1;
gui_set_text(display, "Count: #{count}");
}
fn reset() {
count = 0;
gui_set_text(display, "Count: 0");
}
gui_on(btn_inc, "clicked", "increment");
gui_on(btn_dec, "clicked", "decrement");
gui_on(btn_reset, "clicked", "reset");
gui_add(button_row, btn_inc);
gui_add(button_row, btn_dec);
gui_add(button_row, btn_reset);
gui_add(box, display);
gui_add(box, button_row);
gui_add(window, box);
gui_run();
Temperature Converter¶
gui_init("com.example.tempconv");
let window = gui_window("Temperature Converter", 400, 250);
let box = gui_box("vertical", 10);
// Celsius to Fahrenheit
let c_frame = gui_frame("Celsius to Fahrenheit");
let c_box = gui_box("horizontal", 5);
let c_entry = gui_entry("0");
let c_button = gui_button("Convert");
let c_result = gui_label("= 32°F");
gui_add(c_box, c_entry);
gui_add(c_box, c_button);
gui_add(c_box, c_result);
gui_add(c_frame, c_box);
// Fahrenheit to Celsius
let f_frame = gui_frame("Fahrenheit to Celsius");
let f_box = gui_box("horizontal", 5);
let f_entry = gui_entry("32");
let f_button = gui_button("Convert");
let f_result = gui_label("= 0°C");
gui_add(f_box, f_entry);
gui_add(f_box, f_button);
gui_add(f_box, f_result);
gui_add(f_frame, f_box);
fn convert_c_to_f() {
let c = float(gui_get_text(c_entry));
let f = (c * 9 / 5) + 32;
gui_set_text(c_result, "= #{f}°F");
}
fn convert_f_to_c() {
let f = float(gui_get_text(f_entry));
let c = (f - 32) * 5 / 9;
gui_set_text(f_result, "= #{c}°C");
}
gui_on(c_button, "clicked", "convert_c_to_f");
gui_on(f_button, "clicked", "convert_f_to_c");
gui_add(box, c_frame);
gui_add(box, f_frame);
gui_add(window, box);
gui_run();
Note Taking App¶
gui_init("com.example.notes");
let window = gui_window("Notes", 500, 400);
let box = gui_box("vertical", 5);
// Toolbar
let toolbar = gui_box("horizontal", 5);
let btn_new = gui_button("New");
let btn_save = gui_button("Save");
let btn_load = gui_button("Load");
let entry_filename = gui_entry("note.txt");
gui_add(toolbar, btn_new);
gui_add(toolbar, btn_save);
gui_add(toolbar, btn_load);
gui_add(toolbar, entry_filename);
// Text area
let textview = gui_textview();
// Status bar
let status = gui_label("Ready");
fn new_note() {
gui_set_text(textview, "");
gui_set_text(status, "New note created");
}
fn save_note() {
let filename = gui_get_text(entry_filename);
let content = gui_get_text(textview);
write_file(filename, content);
gui_set_text(status, "Saved to #{filename}");
}
fn load_note() {
let filename = gui_get_text(entry_filename);
if file_exists(filename) == true {
let content = read_file(filename);
gui_set_text(textview, content);
gui_set_text(status, "Loaded #{filename}");
} else {
gui_set_text(status, "File not found!");
}
}
gui_on(btn_new, "clicked", "new_note");
gui_on(btn_save, "clicked", "save_note");
gui_on(btn_load, "clicked", "load_note");
gui_add(box, toolbar);
gui_add(box, textview);
gui_add(box, status);
gui_add(window, box);
gui_run();
Login Form¶
gui_init("com.example.login");
let window = gui_window("Login", 350, 250);
let box = gui_box("vertical", 10);
let title = gui_label("Please Login");
let user_box = gui_box("horizontal", 5);
let user_label = gui_label("Username:");
let user_entry = gui_entry("username");
gui_add(user_box, user_label);
gui_add(user_box, user_entry);
let pass_box = gui_box("horizontal", 5);
let pass_label = gui_label("Password:");
let pass_entry = gui_entry("password");
gui_add(pass_box, pass_label);
gui_add(pass_box, pass_entry);
let remember_check = gui_checkbox("Remember me");
let button_box = gui_box("horizontal", 5);
let btn_login = gui_button("Login");
let btn_cancel = gui_button("Cancel");
gui_add(button_box, btn_login);
gui_add(button_box, btn_cancel);
let status = gui_label("");
fn attempt_login() {
let username = gui_get_text(user_entry);
let password = gui_get_text(pass_entry);
let remember = gui_get_checked(remember_check);
// Simple validation (not real authentication!)
if len(username) < 3 {
gui_set_text(status, "Username too short");
} else {
if len(password) < 4 {
gui_set_text(status, "Password too short");
} else {
let msg = "Login successful!";
if remember == true {
msg = msg + " (Remembered)";
}
gui_set_text(status, msg);
}
}
}
fn cancel_login() {
gui_set_text(user_entry, "");
gui_set_text(pass_entry, "");
gui_set_checked(remember_check, false);
gui_set_text(status, "Cancelled");
}
gui_on(btn_login, "clicked", "attempt_login");
gui_on(btn_cancel, "clicked", "cancel_login");
gui_add(box, title);
gui_add(box, user_box);
gui_add(box, pass_box);
gui_add(box, remember_check);
gui_add(box, button_box);
gui_add(box, status);
gui_add(window, box);
gui_run();
Settings Panel¶
gui_init("com.example.settings");
let window = gui_window("Settings", 400, 300);
let main_box = gui_box("vertical", 10);
// General Settings
let general_frame = gui_frame("General");
let general_box = gui_box("vertical", 5);
let check_auto_save = gui_checkbox("Auto-save");
let check_notifications = gui_checkbox("Enable notifications");
gui_set_checked(check_auto_save, true);
gui_add(general_box, check_auto_save);
gui_add(general_box, check_notifications);
gui_add(general_frame, general_box);
// Appearance
let appearance_frame = gui_frame("Appearance");
let appearance_box = gui_box("vertical", 5);
let check_dark_mode = gui_checkbox("Dark mode");
let check_animations = gui_checkbox("Enable animations");
gui_set_checked(check_animations, true);
gui_add(appearance_box, check_dark_mode);
gui_add(appearance_box, check_animations);
gui_add(appearance_frame, appearance_box);
// Buttons
let button_box = gui_box("horizontal", 5);
let btn_save = gui_button("Save");
let btn_reset = gui_button("Reset");
let btn_cancel = gui_button("Cancel");
fn save_settings() {
let settings = "";
settings = settings + "auto_save=#{gui_get_checked(check_auto_save)}\n";
settings = settings + "notifications=#{gui_get_checked(check_notifications)}\n";
settings = settings + "dark_mode=#{gui_get_checked(check_dark_mode)}\n";
settings = settings + "animations=#{gui_get_checked(check_animations)}\n";
write_file("settings.txt", settings);
print "Settings saved!";
}
fn reset_settings() {
gui_set_checked(check_auto_save, true);
gui_set_checked(check_notifications, false);
gui_set_checked(check_dark_mode, false);
gui_set_checked(check_animations, true);
print "Settings reset to defaults";
}
gui_on(btn_save, "clicked", "save_settings");
gui_on(btn_reset, "clicked", "reset_settings");
gui_add(button_box, btn_save);
gui_add(button_box, btn_reset);
gui_add(button_box, btn_cancel);
gui_add(main_box, general_frame);
gui_add(main_box, appearance_frame);
gui_add(main_box, button_box);
gui_add(window, main_box);
gui_run();
Tips for Building GUI Apps¶
1. Start with Layout¶
Plan your layout before coding: - Sketch the UI on paper - Decide on vertical/horizontal boxes - Group related widgets
2. Use Meaningful IDs¶
let btn_submit = gui_button("Submit", "btn_submit");
let entry_email = gui_entry("email", "entry_email");
3. Organize Code¶
// ===== WIDGETS =====
let window = gui_window(...);
let box = gui_box(...);
// ===== CALLBACKS =====
fn on_save() { ... }
fn on_cancel() { ... }
// ===== LAYOUT =====
gui_add(box, widget1);
gui_add(box, widget2);
// ===== RUN =====
gui_run();
4. Test Incrementally¶
Build one feature at a time and test after each addition.
5. Handle Edge Cases¶
fn save() {
let text = gui_get_text(entry);
if len(text) == 0 {
gui_set_text(status, "Error: Empty input");
return 0;
}
// Process...
}
Compiling GUI Apps¶
Your GUI app is now a standalone executable!