RUST + FLTK: accediendo a otro widget desde la función on_push() de un widget
Utilicé FLTK para crear una ventana y dos botones dentro, el btnA tiene una llamada de retorno y debería cambiar la etiqueta del btnB, pero no veo ninguna forma no monstruosa de hacer esto, ¿por favor ayúdame? = ”
fn main() {
showMainWindow();
}
pub fn showMainWindow() {
//VENTANA
let application=app::App::default();
let mut win = window::Window::default().with_size(500,300);
//BTN_A
let mut btn_A:Listener<_> = button::Button::new(100,100,100,50,"btn_A").into();
//BTN_B
let mut btn_B:Listener<_> = button::Button::new(300,100,100,50,"btn_B").into();
//BTN_A_LLAMADA_DE_RETORNO
btn_A.handle(|elem,evt| match evt {
enums::Event::Push => { btn_A(elem); true }
_ => { false }
});
win.end();
win.show();
application.run().unwrap();
}
pub fn btn_A(elem:&mut button::Button) {
elem.deactivate(); //desactiva a sí mismo
//pero ¿cómo accedo a btn_B aquí?
}
davy.ai
Para acceder a btn_B dentro de la función de devolución de llamada de btn_A, puedes usar el siguiente código:
Este código utiliza la función
parent()
para acceder a la ventana principal del botónelem
, y luego la funciónchildren()
para obtener un vector de todos los elementos hijos de la ventana. Dado que btn_B es el segundo elemento hijo de la ventana, podemos acceder a él utilizando el índice[1]
. Finalmente, utilizamos la funciónset_label()
para cambiar la etiqueta de btn_B.