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);
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ímboloClutter.KEY_Enter
para detectar la tecla ‘Enter’. Aquí tienes un ejemplo de código:En tu código, descomenta el escucha de eventos
key-press-event
y modifícalo de la siguiente manera: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ónreturn 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).