Можно ли создать многострочную метку с переносом слов, размер которой синхронизируется с шириной его родителя? Другими словами, поведение WordPrap в блокноте при изменении ширины окна NotePad.
Вариант использования - это диалоговое окно, в котором необходимо представить блок многострочного текста (инструкции) полностью, без обрезания текста или использования полос прокрутки. В родительском контейнере будет достаточно вертикального пространства для размещения узкой ширины.
Я безуспешно экспериментировал с виджетами Tkinter Label и Message и виджетом ttk Label. Кажется, мне нужно жестко закодировать значение длины обтекания пикселя, чтобы эти элементы управления автоматически переносили слова, когда их текст достигает правого края своих контейнеров. Конечно, менеджеры геометрии Tkinters могут помочь мне автоматически изменить размеры моих этикеток и соответственно обновить их значения длины обертки?
Должен ли я вместо этого смотреть на виджет Текст? Если да, можно ли скрыть границу текстового виджета, чтобы я мог использовать его как многострочную метку с переносом слов?
Вот прототип того, как можно сделать то, что я описал выше. Он был вдохновлен советами Брайана Окли по использованию виджета «Текст» и следующего поста в Stackoverflow:
Как в python's tkinter, как сделать так, чтобы вы могли выделять текст мышью?
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()