2011-07-13 68 views
6

He estado buscando una manera de establecer el orden de tabulación en una aplicación tkinter, en la que he estado trabajando. Actualmente, la orden predeterminada parece estar funcionando desde arriba hacia abajo, pero requiere el uso de CTRL + Pestaña para desplazarse por los controles.¿Cómo se establece el orden de tabulación en una aplicación tkinter?

¿Hay alguna manera de personalizar el orden y, más aún, cambiar el CTRL +Tab a solo Tab?

Respuesta

11

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" 
Cuestiones relacionadas