Создание изменяемых / многострочных меток Tkinter / ttk с переносом слов

Можно ли создать многострочную метку с переносом слов, размер которой изменяется синхронно с шириной его родительского элемента? Другими словами, поведение Блокнота при переносе слов при изменении ширины окна Блокнота.

Вариант использования - это диалоговое окно, в котором необходимо полностью представить блок многострочного текста (инструкции) без обрезки текста или использования полос прокрутки. В родительском контейнере будет достаточно места по вертикали, чтобы вместить узкую ширину.

Я безуспешно экспериментировал с виджетами Tkinter Label и Message, а также с виджетами ttk Label. Кажется, мне нужно жестко закодировать значение длины пикселя, а не использовать эти элементы управления автоматически, когда их текст достигает правого края их контейнеров. Конечно, менеджеры геометрии Tkinters могут помочь мне автоматически изменить размер меток и соответственно обновить их значения длины оболочки?

Следует ли мне вместо этого смотреть на виджет Text? Если да, то можно ли скрыть границу текстового виджета, чтобы я мог использовать ее как многострочную метку с переносом слов?

Здесь ' как прототип того, как можно было бы сделать то, что я описал выше. Он был вдохновлен советом Брайана Окли использовать виджет Text и следующим сообщением в Stackoverflow: Как в 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()

5
задан Community 23 May 2017 в 12:32
поделиться