#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. Спасибо. Сработало так, как я хотел.