Est-il possible de créer une étiquette multiligne avec retour à la ligne qui se synchronise avec la largeur de son parent? En d'autres termes, le comportement WordWrap du Bloc-notes lorsque vous modifiez la largeur de la fenêtre Bloc-notes.Créer des étiquettes Tkinter/ttk redimensionnables/multilignes avec retour à la ligne
Le cas d'utilisation est un dialogue qui doit présenter un bloc de texte multiligne (instructions) dans son intégralité sans avoir à couper le texte ou à recourir à des barres de défilement. Le conteneur parent aura suffisamment d'espace vertical pour s'adapter à des largeurs étroites.
J'ai expérimenté avec les widgets Tkinter Label et Message et le widget ttk Label sans succès. Il semble que j'ai besoin de coder en dur une valeur d'encapsulation de pixels par rapport à avoir ces contrôles automatique Wordwrap lorsque leur texte atteint le bord droit de leurs conteneurs. Les gestionnaires de géométrie de Tkinters peuvent certainement m'aider à redimensionner automatiquement mes étiquettes et à mettre à jour leurs valeurs de pliage en conséquence?
Dois-je regarder le widget Texte à la place? Si oui, est-il possible de cacher la bordure d'un widget Texte pour que je puisse l'utiliser comme une étiquette multiligne avec wordwrap?
Voici un prototype de la façon dont on pourrait faire ce que j'ai décrit ci-dessus. Il a été inspiré par la pointe de Bryan Oakley utiliser le widget texte et le message suivant sur Stackoverflow: In python's tkinter, how can I make a Label such that you can select the text with the mouse?
from Tkinter import *
master = Tk()
text = """
If tkinter is 8.5 or above you'll want the selection background to appear like it does when the widget is activated. Comment this out for older versions of Tkinter.
This is even more text.
The final line of our auto-wrapping label that supports clipboard copy.
""".strip()
frameLabel = Frame(master, padx=20, pady=20)
frameLabel.pack()
w = Text(frameLabel, wrap='word', font='Arial 12 italic')
w.insert(1.0, text)
w.pack()
# - have selection background appear like it does when the widget is activated (Tkinter 8.5+)
# - have label background color match its parent background color via .cget('bg')
# - set relief='flat' to hide Text control borders
# - set state='disabled' to block changes to text (while still allowing selection/clipboard copy)
w.configure(bg=master.cget('bg'), relief='flat', state='disabled')
mainloop()
Juste l'information que je cherchais. Merci Brian. – Malcolm
Bryan: J'ai suivi votre conseil pour considérer le widget Texte et posté un prototype fonctionnel dans une version éditée de ma question originale. Merci encore pour votre aide (sur ce post spécifique et sur les nombreux autres articles que vous avez postés sur Stackoverflow). Cordialement, Malcolm (Toutes mes excuses pour avoir mal orthographié votre nom dans le commentaire ci-dessus) – Malcolm