Question

Je suis nouveau à Python et je suis en train de créer une interface graphique simple à l'aide Tkinter.

Si souvent dans de nombreuses interfaces utilisateur, appuyant sur le bouton onglet va changer le focus d'un widget texte à l'autre. Chaque fois que je suis dans un widget texte, onglet indente seul le curseur texte.

Est-ce que quelqu'un sait si cela est configurable?

Était-ce utile?

La solution

Ceci est très facile à faire avec Tkinter.

Il y a deux choses qui doivent arriver à faire ce travail. Tout d'abord, vous devez vous assurer que le comportement standard ne pas se produire. Autrement dit, vous ne voulez pas l'onglet à la fois insérer un onglet et déplacer le focus sur le widget suivant. En cas de défaut sont traitées par un widget spécifique avant de l'endroit où se produit le comportement standard (typiquement dans les liaisons de classe). Tk a un mécanisme simple intégré pour arrêter les événements de traitement ultérieur.

Deuxièmement, vous devez vous assurer que vous envoyez le widget mise au point approprié. Il est un support intégré pour déterminer ce que le prochain widget est.

Par exemple:

def focus_next_window(event):
    event.widget.tk_focusNext().focus()
    return("break")

text_widget=Text(...)
text_widget.bind("<Tab>", focus_next_window)

Quelques points importants concernant ce code:

  • La méthode tk_focusNext() retourne le widget suivant dans la hiérarchie du clavier traversal.
  • la méthode focus() définit le focus à ce widget
  • retour "break" est critique en ce qu'elle empêche la classe de liaison de mise à feu. Il est cette classe de liaison qui insère le caractère de tabulation, que vous ne voulez pas.

Si vous voulez que ce comportement pour tous les widgets de texte dans une application, vous pouvez utiliser la méthode bind_class() au lieu de bind() faire cette liaison affectent tous les widgets de texte.

Vous pouvez également envoyer la liaison focus à un widget très spécifique, mais je vous recommande de coller avec l'ordre par défaut traversal, alors assurez-vous que l'ordre traversal est correct.

Autres conseils

Il est très simple à utiliser PyQt4 simplement cette seule ligne ci-dessous et vous serez en mesure de changer d'orientation en appuyant sur la touche tab:

self.textEdit.setTabChangesFocus (Vrai)

Pas sûr tkinter, mais avec PyQt, on peut se connecter une fonction à l'onglet changé signal émis par la boîte onglet (le signal porte également une valeur int). Mais pour autant que je sache, Qt est assez bon pour faire la bonne chose sans que cela soit spécifié.

L'accent est un peu traversal personnalisable, laissant généralement le gestionnaire de fenêtres X manipuler (avec focus suit la souris, ou cliquez sur). Selon le manuel il devrait être possible de bind un événement à l'événement de pression de touche, pour les presses à onglet, et le déclenchement d'une l'événement de focusNext dans ces cas.

scroll top