Maison  >  Article  >  développement back-end  >  Comment contrôler l'ordre de liaison dans les widgets de texte Tkinter ?

Comment contrôler l'ordre de liaison dans les widgets de texte Tkinter ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-03 20:09:29435parcourir

How to Control Binding Order in Tkinter Text Widgets?

Ordre de liaison des événements dans le widget de texte Tkinter

Lors de la liaison d'événements à un widget de texte Tkinter, il est important de prendre en compte l'ordre dans lequel les liaisons sont traité. Par défaut, les liaisons du widget sont traitées en premier, suivies des liaisons de classe.

Problème : la liaison se produit avant le changement de contenu

Le problème décrit dans la question se produit lorsque le la liaison automatique est appelée avant la liaison du widget Texte. Dans ce cas, la liaison du widget modifie le contenu du texte, ce qui déclenche l'auto-reliure trop tôt.

Solution : modifier l'ordre de liaison

Il existe plusieurs façons d'ajuster la ordre contraignant pour résoudre ce problème.

  1. Réorganiser les Bindtags :
    Chaque widget possède un ensemble de bindtags. Vous pouvez modifier l'ordre de ces balises pour garantir que la liaison de classe est traitée avant la liaison du widget.
  2. Introduire une Bindtag supplémentaire :
    Créez une nouvelle balise de liaison et attribuez-la à vous-même. obligatoire. Ce bindtag doit être placé après le bindtag de classe dans les balises du widget.

Conséquences des changements d'ordre de liaison

Réorganisation des Bindtags :

  • Affecte toutes les liaisons sur ce widget.
  • Peut rompre les liaisons existantes qui dépendent de l'ordre actuel.

Présentation d'un Bindtag supplémentaire :

  • Vous permet de contrôler quelles liaisons se produisent avant et après les liaisons de classe.
  • Offre une plus grande flexibilité et évite de rompre les liaisons existantes.

Exemple de code

Le code ci-dessous illustre les deux approches pour ajuster l'ordre de liaison :

<code class="python">import tkinter as tk

def on_keypress(event):
    txt = event.widget.get('1.0', 'end')
    status['text'] = f"The value in the text widget is {txt}."

root = tk.Tk()

# Widget with default bindtags
text1 = tk.Text(root, height=5, width=30)
text1.pack()

# Widget with reversed bindtags
text2 = tk.Text(root, height=5, width=30)
text2.bindtags(('Text', '.text2', '.', 'all'))
text2.pack()

# Widget with additional bindtag
text3 = tk.Text(root, height=5, width=30)
text3.bindtags(('.text3', 'Text', 'post-class-bindings', '.', 'all'))
text3.pack()

# Label showing the value in the text widgets
status = tk.Label(root, justify="left")
status.pack()

# Bind to <KeyPress> event
text1.bind('<KeyPress>', on_keypress)
text2.bind('<KeyPress>', on_keypress)
text3.bind_class('post-class-bindings', '<KeyPress>', on_keypress)

root.mainloop()</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn