Esto es muy fácil de hacer con Tkinter.
Hay un par de cosas que tienen que suceder para que esto funcione. En primer lugar, debe asegurarse de que el comportamiento estándar no ocurra. Es decir, no desea que la pestaña inserte una pestaña y mueva el foco al siguiente widget. Por defecto, los eventos son procesados por un widget específico antes de que ocurra el comportamiento estándar (generalmente en enlaces de clase). Tk tiene un mecanismo incorporado simple para detener eventos de procesamiento adicional.
En segundo lugar, debe asegurarse de enviar el foco al widget apropiado. Existe un soporte integrado para determinar cuál es el próximo widget.
Por ejemplo:
def focus_next_window(event):
event.widget.tk_focusNext().focus()
return("break")
text_widget=Text(...)
text_widget.bind("<Tab>", focus_next_window)
puntos importantes acerca de este código:
- El método
tk_focusNext()
devuelve el siguiente Widget en la jerarquía de recorrido de teclado.
- el método
focus()
pone el foco en ese widget
- que devuelve
"break"
es crítico, ya que evita que la vinculación de clases se active. Es este enlace de clase el que inserta el carácter de tabulación, que no desea.
Si desea este comportamiento para todos los widgets de texto en una aplicación que puede utilizar el método bind_class()
en lugar de bind()
de que sea vinculante afectar a todos los widgets de texto.
También puede hacer que el enlace se envíe a un widget muy específico, pero le recomiendo que se quede con el orden de recorrido predeterminado, luego asegúrese de que el orden transversal sea el correcto.
Esa sugerencia de devolución ("break") me salvó el día, ¡gracias Bryan! – Symon
Tuve una pregunta en gran parte no relacionada sobre cómo hacer algunos pasos adicionales en respuesta a un, ** sin ** realmente detener el de llevar a cabo su comportamiento predeterminado. Esta respuesta lo cubrió perfectamente. ¡Gracias! –
JDM