как создать текстовое поле с динамически изменяемым размером с помощью tkinter в Python?

#python #tkinter

#python #tkinter

Вопрос:

Я пытаюсь создать виджет текстового поля с динамически изменяемым размером в tkinter. Как заставить его добавить еще одну строку, когда строка заполнена, и наоборот удалить строку, если я решу удалить содержимое. Я попытался добавить <KeyRelease> привязку, и частично это сработало, я получил что-то вроде этого:

 import tkinter as tk
import tkinter.font as tkFont

def breakline(event):
    inp = event.widget.get(1.0, 'end-1c')
    font = tkFont.Font(size=event.widget['font'].split(' ')[-1])
    TextWidth = font.measure('0') * event.widget['width']
    InpWidth = font.measure(inp)
    if inp and not InpWidth % TextWidth:
        if event.widget['height'] != InpWidth // TextWidth:
            event.widget['height'] = InpWidth // TextWidth
    elif event.widget['height'] != InpWidth // TextWidth   1:
        event.widget['height'] = (InpWidth // TextWidth)   1


win = tk.Tk()

x = tk.Text(win, height=1, width=30, font='12')
x.bind('<KeyRelease>', breakline)

x.grid(row=0, column=0, padx=5, pady=5)
win.mainloop()
  

Но это тоже не сработало так, как я хотел, поскольку оно выполняется только тогда, когда я отпускаю кнопку, поэтому, если я попытаюсь отправить спам, он добавит строки в последнее время. Есть ли какое-либо другое решение?

Комментарии:

1. Попробуйте виртуальное событие <<Modified>> вместо <KeyRelease> , но вам нужно вызвать event.widget.edit_modified(0) в конце breakline() .

2. Спасибо. Сработало так, как я хотел.