How I can update child widget of gtk::Grid (gtk::Label in example) in runtime?
In example code after change value SpinButton, I add recreated Grid (fn grid()) with updated childs (I don't want remove old Grid in example).
In a real project I need to add a Grid with an updateable child element Label without recreate Grid. New values will be continuously read from the database.
Example:
pub fn test(parent: >k::Box) {
let parent_grid = gtk::Grid::new();
let parent_spin = gtk::SpinButton::with_range(0.0, 10.0, 1.0);
parent_grid.add(&parent_spin);
let parent_value = Rc::new(RefCell::new(0));
let parent_value_clone = parent_value.clone();
let parent_grid_rc = Rc::new(RefCell::new(parent_grid));
let parent_grid_rc_clone = parent_grid_rc.clone();
parent_spin.connect_value_changed(move |x| {
*parent_value_clone.borrow_mut() = x.value_as_int();
(*parent_grid_rc_clone.borrow_mut()).add(&grid(*parent_value.borrow()));
});
(*parent_grid_rc.borrow()).show_all();
parent.add(&(*parent_grid_rc.borrow()));
}
fn grid(value: i32) -> gtk::Grid {
let grid = gtk::Grid::new();
let label_box = gtk::Label::new(Some("Value: "));
let value_box = Rc::new(RefCell::new(gtk::Label::new(Some(&format!("{}", value))))); // THIS LABEL MUST BE UPDATED DURING RUNTIME
grid.add(&label_box);
grid.add(&(*value_box.borrow()));
grid.show_all();
grid
}
I'm new to this, so if there are other methods for creating dynamic objects in Rust-GTK and modifying their children, I'd love to hear about them.