es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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í?

}

Tags:  ,

Answer

  1. Avatar for 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:

    pub fn btn_A(elem:&mut button::Button) {
        elem.deactivate(); //desactiva el propio botón
        // Accede a la etiqueta de btn_B y cámbiala
        let btn_b_label = "Nueva etiqueta de Btn B";
        elem.parent().unwrap().children().unwrap()[1].set_label(&btn_b_label);
    }
    

    Este código utiliza la función parent() para acceder a la ventana principal del botón elem, y luego la función children() 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ón set_label() para cambiar la etiqueta de btn_B.

Comments are closed.