Pregunta

Soy nuevo en Python y estoy tratando de crear una interfaz gráfica sencilla utilizando Tkinter.

Muy a menudo en muchas interfaces de usuario, pulsando el botón de pestaña cambiará el foco de un widget de texto a otro. Cada vez que estoy en un widget de texto, ficha sólo sangra el cursor de texto.

¿Alguien sabe si esto es configurable?

¿Fue útil?

Solución

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, es necesario asegurarse de que el comportamiento estándar no suceda. Es decir, que no quiere pestaña a la vez insertar una pestaña y mover el enfoque al siguiente artilugio. Por eventos predeterminados son procesadas por un widget específica antes de que se produce el comportamiento estándar (típicamente en enlaces de clase). Tk tiene un simple mecanismo incorporado para detener los acontecimientos de su procesamiento posterior.

En segundo lugar, es necesario asegurarse de que envíe el foco al widget correspondiente. Se construye el soporte para determinar cuál es el siguiente widget es.

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() establece el foco en ese widget
  • volver "break" es crítica, ya que evita la clase de unión de cocción. Es esta clase de unión que se 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 se puede utilizar el método bind_class() en lugar de bind() de que sea vinculante afectan a todos los widgets de texto.

También puede hacer que la unión enviar el foco a un widget muy específico pero recomiendo quedarse con el orden de recorrido predeterminado, a continuación, asegúrese de que el orden de recorrido es correcta.

Otros consejos

Es muy simple en PyQt4 sólo tiene que utilizar éste sola línea de abajo y usted será capaz de cambiar la selección botón de pestaña pulsando:

self.textEdit.setTabChangesFocus (Verdadero)

No está seguro acerca Tkinter, pero con PyQt, se puede conectar una función a la pestaña cambió señal emitida por la caja de pestaña (la señal también lleva a un valor entero). Pero por lo que yo soy consciente de Qt es bastante bueno en hacer lo correcto sin que se especifica.

El recorrido de enfoque es un poco personalizable, por lo general dejar que el gestor de ventanas X manejarlo (con foco sigue al ratón, o haciendo clic). Según el manual debería ser posible a bind un evento para el evento pulsación de tecla, para prensas de pestañas, y provocando un evento focusNext en esos casos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top