Как в tkinter python сделать Text с автоматической настройкой высоты? Прошу помочь!

Вот пример: есть виджет Text на окне. Его высота в строках = 1. Я печатаю что-либо и дохожу до конца, после этого высота Text сразу изменяется на 2 и тексту есть место куда вписываться. Если я удаляю символы и строк уже слишком много, то высота уменьшается. Так же должно работать и при выделении и удалении, Ctrl-x и других изменениях. Сам пытался и с chat-GPT боролся, но не получается хорошо.


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

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

Один из вариантов - вызывать функцию пересчёта высоты при возникновении события <<Modified>>.

Пример кода:

from tkinter import Tk, Text


class AutoText(Text):
    def __init__(self, *args, **kwargs):
        super().__init__(height=1, wrap="char", *args, **kwargs)
        self.bind("<<Modified>>", self.__update_height)

    def __update_height(self, event):
        height = self.tk.call((self._w, "count", "-update", "-displaylines", "1.0", "end"))
        self.configure(height=height)
        self.edit_modified(False)


root = Tk()
root.geometry('200x100')
text = AutoText(width=10)
text.pack()

root.mainloop()

Подробнее про изменение высоты можно прочитать тут,
а про bind("<<Modified>>") - тут.

→ Ссылка