Перенос строки Label tkinter

from tkinter import *
root = Tk()
root.geometry('600x400')
label = Label(root, text='аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа', 
              font='Georgia') #74
label.grid(row=0, column=0)

В переменной label хранится 74 "а", это предел (учитывая шрифт и разрешение 600x400), дальше символы уходят за экран. Так вот, помогите мне сделать так, чтобы символы не уходили за экран, а переносились на другую строку.


Ответы (1 шт):

Автор решения: insolor

Как вариант можно получить фактическую ширину текста, посчитать примерную ширину символа, посчитать сколько символов поместится в нужной ширине окна, потом с помощью функции wrap из модуля textwrap разбить на строки и вывести текст в label еще раз:

from tkinter import *
from textwrap import wrap

root = Tk()
root.geometry('600x400')

text = 'a'*74

label = Label(root, text=text, font='Georgia')
label.grid(row=0, column=0)

# Принудительно обновляем интерфейс,
# чтобы появилось окно и можно было получить фактическую ширину текста:
root.update()  

width = label.winfo_width()

if width > 600:
    char_width = width / len(text)
    wrapped_text = '\n'.join(wrap(text, int(600 / char_width)))
    label['text'] = wrapped_text

root.mainloop()

Скриншот

Функция wrap также корректно делает перенос по словам:

введите сюда описание изображения

→ Ссылка