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.

Cómo hacer que el ingreso de teclas funcione en St.Entry de gjs

Quiero presionar la tecla ‘Enter’ para llamar a una función; probé muchos códigos en la parte de key-press-event, pero ninguno funciona. También desconozco cuál de los siguientes key_symboles es el correcto: Clutter.KEY_Escape KEY_ISO_Enter KEY_KP_Enter KEY_3270_Enter.

Otras señales como 'primary-icon-clicked' funcionan.

https://gjs-docs.gnome.org/clutter9~9_api/clutter.actor#signal-key-press-event casi no dice nada.


let input = new St.Entry({
name: 'searchEntry',
style_class: 'big_text',
primary_icon: new St.Icon({ gicon: local_icon("countdown-symbolic.svg") }),
secondary_icon: new St.Icon({ gicon: local_icon("stopwatch-symbolic.svg") }),
can_focus: true,
hint_text: _('xxxx'),
track_hover: true,
x_expand: true,
});
input.connect('primary-icon-clicked', () => {add_timer();});
input.connect('secondary-icon-clicked', () => {add_timer();});
//~ input.connect('key-press-event', (event) => {if(event.get_key_symbol() == Clutter.KEY_Left)add_timer();});
input.connect('key-press-event', (self, event) => {
//~ let [success, keyval] = event.get_keyval();
//~ let keyname = Gdk.keyval_name(keyval);
//~ if (keyname === "Control_L"){add_timer();}
//~ const symbol = event.get_key_symbol();
//~ if (symbol === Clutter.KEY_KP_Enter) {add_timer(); return true;}
//~ if (event.get_key_symbol() === Clutter.KEY_Enter){add_timer();}
//~ if(event.keyval == Clutter.KEY_Enter){add_timer();} Clutter.KEY_Escape KEY_ISO_Enter KEY_KP_Enter KEY_3270_Enter KEY_equal
});
item_input.add(input);

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para llamar a una función cuando se presiona la tecla ‘Enter’, debes agregar un escucha de señal key-press-event a tu widget de entrada de texto. Puedes usar el símbolo Clutter.KEY_Enter para detectar la tecla ‘Enter’. Aquí tienes un ejemplo de código:

    let input = new St.Entry({
        // ... otras propiedades ...
    });
    
    input.connect('key-press-event', (actor, event) => {
        if (event.get_key_symbol() === Clutter.KEY_Enter) {
            myFunction();
        }
    });
    
    function myFunction() {
        // Haz lo que desees hacer cuando se presione la tecla Enter
    }
    

    En tu código, descomenta el escucha de eventos key-press-event y modifícalo de la siguiente manera:

    input.connect('key-press-event', (actor, event) => {
        if (event.get_key_symbol() === Clutter.KEY_Enter) {
            add_timer();
            return true;
        }
    });
    

    Esto debería llamar a la función add_timer() cuando se presione la tecla ‘Enter’ en tu widget de entrada de texto. La declaración return true es importante para evitar que el evento se propague y active otros widgets o el comportamiento predeterminado (por ejemplo, insertar un carácter de nueva línea).

Comments are closed.