Créer redimensionnables / multiligne Tkinter / TTK étiquettes avec retour à la ligne

StackOverflow https://stackoverflow.com/questions/4011354

  •  25-09-2019
  •  | 
  •  

Question

Est-il possible de créer une étiquette à plusieurs lignes avec retour à la ligne qui redimensionne en phase avec la largeur de son parent? En d'autres termes, le comportement wordwrap du Bloc-notes que vous changez la largeur de la fenêtre NotePad.

Le cas d'utilisation est une boîte de dialogue qui doit présenter un bloc de texte à lignes multiples (instructions) dans son intégralité, sans avoir coupé le texte ou le recours à des barres de défilement. Le conteneur parent aura suffisamment d'espace vertical pour accueillir des largeurs étroites.

Je l'ai expérimenté avec Label Tkinter et widgets message et le widget Label TTK sans succès. Il semble que je dois coder en dur une valeur wraplength pixel par rapport à ces contrôles ont wordwrap automatique lorsque leur texte atteint le bord droit de leurs conteneurs. Tkinters Certes, les gestionnaires de géométrie peuvent me aider auto-redimensionner mes étiquettes et mettre à jour leurs valeurs wraplength en conséquence?

Dois-je regarderais le widget texte à la place? Si oui, est-il possible de cacher la bordure d'un widget texte que je peux l'utiliser comme une étiquette à plusieurs lignes avec wordwrap?

Voici un prototype de la façon dont on pourrait faire ce que je décrit ci-dessus. Il a été inspiré par la pointe de Bryan Oakley utiliser le widget texte et le message suivant sur Stackoverflow:

Autres conseils

Message widget de :

  

Le widget du message est une variante de l'étiquette, conçu pour afficher des messages multilignes. Le widget de message peut placer le texte, et d'ajuster sa largeur pour maintenir un rapport d'aspect donné.

Voici le code:

entry = Label(self, text=text,
    anchor=NW, justify=LEFT,
    relief=RIDGE, bd=2)
def y(event, entry=entry):
  # FIXME: make this a global method, to prevent function object creation
  # for every label.
  pad = 0
  pad += int(str(entry['bd']))
  pad += int(str(entry['padx']))
  pad *= 2
  entry.configure(wraplength = event.width - pad)
entry.bind("<Configure>", y )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top