Easy simple fast create gtk gui calculator rust

  1. cargo new calculator
    cd calculator
    
    • Cargo.toml.
    [dependencies]
    gtk = "0.9.0"
    regl = "0.2.1"
    glib = "0.9.0"
    
  2. **

    use gtk::prelude::*;
    use gtk::{Button, Entry, Grid, Label, Window, WindowType};
    use std::ops::Add;
    
    struct Calculator {
        entry: Entry,
        operator: Option<String>,
        first_operand: Option<f64>,
    }
    
    impl Calculator {
        fn new() -> Self {
            let entry = Entry::new();
            entry.set_editable(false);
    
            Self {
                entry,
                operator: None,
                first_operand: None,
            }
        }
    
        fn add_button(&self, grid: &Grid, label: &str, row: usize, col: usize) {
            let button = Button::with_label(label);
            let entry = self.entry.clone();
            
            button.connect_clicked(move |_| {
                entry.set_text(&label);
            });
    
            grid.attach(&button, col as i32, row as i32, 1, 1);
        }
    
        fn add_operations(&mut self, grid: &Grid) {
            let calc_op = |operator, entry: &Entry, first_operand: &mut Option<f64>| {
                let current_text = entry.get_text().unwrap();
                if let Ok(value) = current_text.parse::<f64>() {
                    *first_operand = Some(value);
                    entry.set_text(&operator);
                }
            };
    
            let operator_buttons = vec![("+", "add"), ("-", "sub"), ("*", "mul"), ("/", "div")];
    
            for (index, (label, op)) in operator_buttons.iter().enumerate() {
                let entry = self.entry.clone();
                let first_operand = &mut self.first_operand;
                
                let button = Button::with_label(label);
                button.connect_clicked(move |_| {
                    calc_op(op, &entry, first_operand);
                });
    
                grid.attach(&button, index as i32, 5, 1, 1);
            }
        }
    }
    
    fn main() {
        gtk::init().expect("Failed to initialize GTK.");
    
        let window = Window::new(WindowType::Toplevel);
        window.set_title("Calculator");
        window.set_default_size(200, 200);
    
        let grid = Grid::new();
        let calculator = Calculator::new();
        
        grid.attach(&calculator.entry, 0, 0, 4, 1);
    
        let buttons = [
            "7", "8", "9",
            "4", "5", "6",
            "1", "2", "3",
            "0", "+", "=",
        ];
    
        for (index, label) in buttons.iter().enumerate() {
            calculator.add_button(&grid, label, (index / 3) + 1, index % 3);
        }
    
        window.add(&grid);
        window.connect_delete_event(|_, _| {
            gtk::main_quit();
            Inhibit(false)
        });
    
        window.show_all();
        gtk::main();
    }
    
  3. **

    cargo run
    

Can you please format your post a bit more clearly? It will make it easier to read.