Нет, в tkinter нет ничего встроенного для этого. Вы можете получить тот же эффект, связавшись с событием <Configure>
, которое срабатывает всякий раз, когда виджет меняет размер (например, когда он добавляется в окно или когда пользователь изменяет размер окна).
В связанной функции вы получаете шрифт и текст, используйте атрибут measure
шрифта и начинаете обрезать символы до тех пор, пока метка не уместится.
Пример
import Tkinter as tk # py2
import tkFont # py2
#import tkinter as tk # py3
#import tkinter.font as tkFont # py3
root = tk.Tk()
def fitLabel(event):
label = event.widget
if not hasattr(label, "original_text"):
# preserve the original text so we can restore
# it if the widget grows.
label.original_text = label.cget("text")
font = tkFont.nametofont(label.cget("font"))
text = label.original_text
max_width = event.width
actual_width = font.measure(text)
if actual_width <= max_width:
# the original text fits; no need to add ellipsis
label.configure(text=text)
else:
# the original text won't fit. Keep shrinking
# until it does
while actual_width > max_width and len(text) > 1:
text = text[:-1]
actual_width = font.measure(text + "...")
label.configure(text=text+"...")
label = tk.Label(root, text="This is some very long text!", width=15)
label.pack(fill="both", expand=True, padx=2, pady=2)
label.bind("<Configure>", fitLabel)
tk.mainloop()