Можно ли создать многострочную метку с переносом слов, размер которой изменяется синхронно с шириной ее родителя? Другими словами, поведение переноса слов Блокнота при изменении ширины окна Блокнота.
Вариант использования — это диалоговое окно, в котором необходимо представить блок многострочного текста (инструкции) полностью, не обрезая текст и не прибегая к полосам прокрутки. В родительском контейнере будет достаточно места по вертикали, чтобы вместить узкую ширину.
Я безуспешно экспериментировал с виджетами Tkinter Label и Message, а также с виджетом ttk Label. Кажется, мне нужно жестко закодировать значение длины переноса в пикселях, а не сделать так, чтобы эти элементы управления автоматически переносили слова, когда их текст достигает правого края их контейнеров. Конечно, менеджеры геометрии Tkinters могут помочь мне автоматически изменить размер моих меток и соответствующим образом обновить их значения длины переноса?
Должен ли я вместо этого смотреть на виджет «Текст»? Если да, то можно ли скрыть границу текстового виджета, чтобы я мог использовать его как многострочную метку с переносом слов?
Вот прототип того, как можно сделать то, что я описал выше. Он был вдохновлен советом Брайана Окли по использованию виджета «Текст» и следующей публикацией в Stackoverflow: a-label-such-that-you-can-select-the-text-wit">В tkinter Python, как я могу сделать метку, чтобы вы могли выбирать текст с помощью мыши?
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()