orden de tabulación se basa en el orden de apilamiento, que a su vez por defecto en el orden en que se crean los widgets. Puede ajustar el orden de apilamiento (y, por lo tanto, el orden de tabulación) utilizando los métodos tkraise
(o lift
) y lower
.
Esto debería estar trabajando fuera de la caja para usted sin la necesidad de presionar CTRL + Tab . Tenga en cuenta, sin embargo, que la pestaña inserta una pestaña literal en widgets de texto en lugar de mover el foco a otro control. Ese comportamiento predeterminado puede cambiarse por supuesto.
He aquí un ejemplo que muestra cómo revertir el orden de tabulación. Al ejecutar el ejemplo, presionar la pestaña en la primera entrada debería llevarlo a la última. pestaña pulsando de nuevo le lleva a la segunda, luego la primera, espuma, enjuague, repita
Tenga en cuenta que los Tk
comandos nativos son raise
y lower
, pero desde raise
es una palabra reservada en Python que tuvo que ser renombrado en tkinter.
import Tkinter as tk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
e1 = tk.Entry(self)
e2 = tk.Entry(self)
e3 = tk.Entry(self)
e1.insert(0,"1")
e2.insert(0,"2")
e3.insert(0,"3")
e1.pack()
e2.pack()
e3.pack()
# reverse the stacking order to show how
# it affects tab order
new_order = (e3, e2, e1)
for widget in new_order:
widget.lift()
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
Ya que mencionar que tiene que hacer CTRL +Tab, supongo que está tratando de tener el la pestaña de cambio de foco de un widget de texto. Normalmente, una tecla de tabulación inserta una pestaña literal. Si desea que cambie el enfoque, simplemente agregue un enlace al evento <Tab>
.
Tkinter tiene una función que devolverá el nombre de la siguiente widget que debe obtener el foco. Desafortunadamente, para versiones anteriores de Tkinter esa función tiene errores. Sin embargo, es fácil evitarlo. Aquí hay un par de métodos que puede agregar al código anterior:
def _focusNext(self, widget):
'''Return the next widget in tab order'''
widget = self.tk.call('tk_focusNext', widget._w)
if not widget: return None
return self.nametowidget(widget.string)
def OnTextTab(self, event):
'''Move focus to next widget'''
widget = event.widget
next = self._focusNext(widget)
next.focus()
return "break"