Я искал много ответов, но нашел только те, которые показывают, как это сделать для Entry(). Здесь я хотел бы ограничить количество символов до 200, но я не знаю, как это сделать.
from tkinter import *
window = Tk()
window.geometry("800x600")
msgText = Text(window, width = 42, height = 13, font = ('Arial', 10), wrap=WORD)
msgText.grid(row = 1, column = 0, columnspan = 2, padx = 30, pady = 5)
window.mainloop()
Может ли кто-нибудь помочь мне, показав мне, как это сделать, или связав такой вопрос?






Вы можете настроить функцию, которая подсчитывает количество вводов клавиш и вызывать эту функцию после каждого ввода.
from tkinter import *
window = Tk()
window.geometry("800x600")
msgText = Text(window, width = 42, height = 13, font = ('Arial', 10), wrap=WORD)
msgText.grid(row = 1, column = 0, columnspan = 2, padx = 30, pady = 5)
def count_entries(e):
entries = msgText.get('1.0',END)
count = len(entries)
# Probably want to count the number of line breaks (\n) and remove them from the count
if count > 200:
msgText.delete('end-2c')
msgText.bind('<KeyRelease>',count_entries)
window.mainloop()
Честно говоря, я бы подумал об использовании другого виджета, такого как Сообщение.
Message устарел в пользу Label и ни в коем случае не принимает пользовательский ввод.
Вот краткий пример использования виджета Text с функцией подсчета символов, привязанной к событиям '<KeyPress>' (также известным как '<Key>') и событиям '<KeyRelease>'. Привязка к обоим событиям (по моему опыту) обеспечивает точность подсчета в ситуациях, когда клавиши удерживаются/повторяются и т.д.
Примечание. Я внес несколько незначительных изменений, чтобы лучше следовать рекомендациям.
import tkinter as tk
def char_count(event):
"""This function allows typing up to the character limit and allows deletion"""
count = len(msg_text.get('1.0', 'end-1c'))
if count >= CHAR_LIMIT and event.keysym not in {'BackSpace', 'Delete'}:
return 'break' # dispose of the event, prevent typing
window = tk.Tk()
window.geometry("800x600")
CHAR_LIMIT = 200
# PRO TIP: don't use camelCase for Python variable names
msg_text = tk.Text(window, width=42, height=13, font=('Arial', 10), wrap=WORD)
msg_text.grid(row=1, column=0, columnspan=2, padx=30, pady=5)
msg_text.bind('<KeyPress>', char_count)
msg_text.bind('<KeyRelease>', char_count)
window.mainloop()
Обратите внимание, что это заблокирует все нажатия клавиш, кроме Delete или BackSpace, как только будет достигнуто ограничение на количество символов! Я оставлю это вам, чтобы выяснить, как различать, какие нажатия клавиш разрешены (подсказка: класс строк str имеет ряд методов для такого рода вещей)
Это помогает? stackoverflow.com/questions/38454138/…