Как в 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>>")
- тут.