Задать вопрос
id_666i
@id_666i

Как сделать счётчик слов в виджете text tkinter?

Привет, хочу сделать счётчик слов/букв/ и тд который будет считать слова/буквы/ и тд из виджета text
Не знаю как это сделать, есть такой вариант( самописный)
self.text = Text(width=200, height=100, fg='black', wrap=WORD, yscrollcommand=scrollbar.set)
        self.text.pack()

        textLen = str(len(self.text.get(1.0))) 

        self.wordCounter = tk.Label(toolbarBottom, justify="left" , bg="#d7d8e0", text="Слов в тексте: " + textLen)
        self.wordCounter.pack()

но он всегда показывает "1"
  • Вопрос задан
  • 433 просмотра
Подписаться 1 Простой 5 комментариев
Решения вопроса 2
@yahabrovec
Слушай , когда ты используешь функцию .get она возращает тебе весь текст который находиться внутри виджета. К примеру она вернула тебе 'Какой-то текст'.
Пишешь
counter = 0
for word in text:
       if word == ' ' #пробелы не считаем
             pass
       else:
            counter += 1

Думаю смысл ты понял
Ответ написан
Комментировать
Что бы он выводил актуальную цифру в процессе набора текста, можно привязать функцию подсчёта знаков к нажатию клавиш на клавиатуре, как-то так:
def count():
    textLen = str(len(text.get(1.0, END)))
    wordCounter["text"] = "Символов в тексте: " + textLen

text.bind("<Key>", lambda e: count())
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
надо забиндить обновление счетчика на нажатия клавиш
def toolbar(self):
        .....
        self.wordCounter = tk.Label(toolbarBottom, justify="left", bg="#d7d8e0", text="Символов в тексте: 0")
        self.wordCounter.pack()
        self.text.bind('<KeyPress>', self.on_textfield_update)
        self.text.bind('<KeyRelease>', self.on_textfield_update)
        .....

    def on_textfield_update(self, event):
        symbols = len(self.text.get('1.0', END).strip())
        self.wordCounter['text'] = 'Символов в тексте: {}'.format(symbols)
Ответ написан
Комментировать
id_666i
@id_666i Автор вопроса
К сожалению, тоже не работает
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы