如何获取 Tkinter 文本小部件中文本的当前长度
How do I get the current length of the Text in a Tkinter Text widget
我正在编写一个轻型 webtexting 应用程序,我正在尝试在用于编写要在 webtext 中发送的消息的 TKinter 文本小部件中显示当前字符数。我现在的代码可以在下面看到,我正在使用 python
root = Tk()
msgLabel = Label(text="Message")
msgLabel.grid(row=0, column=0)
msg = Text(width=40, height=4, wrap="word")
msg.grid(row=0, column=1, padx=10, pady=5)
#Try to display number of characters within message to user
charCount = Label(text="Character Count: "+str(len(meg.get("1.0", 'end-1c')))
charCount.grid(row=1, column=1, pady=5, padx=5)
root.mainloop()
我希望能够显示用户所写消息中的字符数,因为每个网页文本有 160 个字符的限制。是否可以显示当前字符长度,随着文本的插入和删除而更新?提前致谢
我们使用StringVar
将新文本设置为标签。
我们需要为按键绑定msg
。
from Tkinter import *
root = Tk()
def update(event):
var.set(str(len(msg.get("1.0", 'end-1c'))))
msgLabel = Label(text="Message")
msgLabel.grid(row=0, column=0)
msg = Text(width=40, height=4, wrap="word")
msg.grid(row=0, column=1, padx=10, pady=5)
var = StringVar()
#Try to display number of characters within message to user
charCount = Label(textvariable=var)
charCount.grid(row=1, column=1, pady=5, padx=5)
msg.bind("<KeyRelease>", update)
root.mainloop()
在下面的示例中,text
中的字符数始终显示在上面的 label
中。
try:
import tkinter as tk
except:
import Tkinter as tk
def on_every_keyboard_input(event):
update_char_length(text, label)
def update_char_length(text_widget, display_widget):
string_in_text = text_widget.get('1.0', 'end-1c')
string_length = len(string_in_text)
display_widget['text'] = string_length
if __name__ == '__main__':
root = tk.Tk()
text = tk.Text(root)
label = tk.Label(root, text=0, justify='center')
text.bind('<KeyPress>', on_every_keyboard_input)
text.bind('<KeyRelease>', on_every_keyboard_input)
label.pack()
text.pack()
root.mainloop()
下面是一个小例子,其中 text
中的字符数始终显示在上面的 label
中。
try:
import tkinter as tk
except:
import Tkinter as tk
if __name__ == '__main__':
def update(event):
label['text'] = len(text.get('1.0', 'end-1c'))
root = tk.Tk()
text = tk.Text(root)
label = tk.Label(root, text=0, justify='center')
text.bind('<KeyPress>', update)
text.bind('<KeyRelease>', update)
label.pack()
text.pack()
root.mainloop()
下面的脚本定义了一个class,TextWithCharLength
,其中有一个Text
和一个Label
,其中[=14=中内容的字符长度] 显示:
try:
import tkinter as tk
except:
import Tkinter as tk
class TextWithCharLength(tk.Frame):
def __init__(self, master, *args, **kwargs):
tk.Frame.__init__(self, master, *args, **kwargs)
self._events = ('<KeyPress>',
'<KeyRelease>',
'<ButtonRelease-1>',
'<ButtonRelease-2>',
'<ButtonRelease-3>',
'<Delete>',
'<<Cut>>',
'<<Paste>>',
'<<Undo>>',
'<<Redo>>')
self._create_widgets()
self._widgets_layout()
self.update_char_len(event=None)
self.bind_events_on_widget_to_callback( self._events,
self.text,
self.update_char_len)
def _create_widgets(self):
self.label = tk.Label(self, justify='center')
self.text = tk.Text(self)
def _widgets_layout(self):
self.label.pack(fill='x', expand=True)
self.text.pack(fill='both', expand=True)
@staticmethod
def bind_events_on_widget_to_callback(events, widget, callback):
""" Bind events on widget to callback.
"""
for _event in events:
widget.bind(_event, callback)
def update_char_len(self, event):
""" Update self.label's text with character length of content
in self.text.
"""
self.label['text'] = len(self.text.get('1.0', 'end-1c'))
if __name__ == '__main__':
root = tk.Tk()
text_frame = TextWithCharLength(root)
text_frame.pack()
root.mainloop()
我正在编写一个轻型 webtexting 应用程序,我正在尝试在用于编写要在 webtext 中发送的消息的 TKinter 文本小部件中显示当前字符数。我现在的代码可以在下面看到,我正在使用 python
root = Tk()
msgLabel = Label(text="Message")
msgLabel.grid(row=0, column=0)
msg = Text(width=40, height=4, wrap="word")
msg.grid(row=0, column=1, padx=10, pady=5)
#Try to display number of characters within message to user
charCount = Label(text="Character Count: "+str(len(meg.get("1.0", 'end-1c')))
charCount.grid(row=1, column=1, pady=5, padx=5)
root.mainloop()
我希望能够显示用户所写消息中的字符数,因为每个网页文本有 160 个字符的限制。是否可以显示当前字符长度,随着文本的插入和删除而更新?提前致谢
我们使用StringVar
将新文本设置为标签。
我们需要为按键绑定msg
。
from Tkinter import *
root = Tk()
def update(event):
var.set(str(len(msg.get("1.0", 'end-1c'))))
msgLabel = Label(text="Message")
msgLabel.grid(row=0, column=0)
msg = Text(width=40, height=4, wrap="word")
msg.grid(row=0, column=1, padx=10, pady=5)
var = StringVar()
#Try to display number of characters within message to user
charCount = Label(textvariable=var)
charCount.grid(row=1, column=1, pady=5, padx=5)
msg.bind("<KeyRelease>", update)
root.mainloop()
在下面的示例中,text
中的字符数始终显示在上面的 label
中。
try:
import tkinter as tk
except:
import Tkinter as tk
def on_every_keyboard_input(event):
update_char_length(text, label)
def update_char_length(text_widget, display_widget):
string_in_text = text_widget.get('1.0', 'end-1c')
string_length = len(string_in_text)
display_widget['text'] = string_length
if __name__ == '__main__':
root = tk.Tk()
text = tk.Text(root)
label = tk.Label(root, text=0, justify='center')
text.bind('<KeyPress>', on_every_keyboard_input)
text.bind('<KeyRelease>', on_every_keyboard_input)
label.pack()
text.pack()
root.mainloop()
下面是一个小例子,其中 text
中的字符数始终显示在上面的 label
中。
try:
import tkinter as tk
except:
import Tkinter as tk
if __name__ == '__main__':
def update(event):
label['text'] = len(text.get('1.0', 'end-1c'))
root = tk.Tk()
text = tk.Text(root)
label = tk.Label(root, text=0, justify='center')
text.bind('<KeyPress>', update)
text.bind('<KeyRelease>', update)
label.pack()
text.pack()
root.mainloop()
下面的脚本定义了一个class,TextWithCharLength
,其中有一个Text
和一个Label
,其中[=14=中内容的字符长度] 显示:
try:
import tkinter as tk
except:
import Tkinter as tk
class TextWithCharLength(tk.Frame):
def __init__(self, master, *args, **kwargs):
tk.Frame.__init__(self, master, *args, **kwargs)
self._events = ('<KeyPress>',
'<KeyRelease>',
'<ButtonRelease-1>',
'<ButtonRelease-2>',
'<ButtonRelease-3>',
'<Delete>',
'<<Cut>>',
'<<Paste>>',
'<<Undo>>',
'<<Redo>>')
self._create_widgets()
self._widgets_layout()
self.update_char_len(event=None)
self.bind_events_on_widget_to_callback( self._events,
self.text,
self.update_char_len)
def _create_widgets(self):
self.label = tk.Label(self, justify='center')
self.text = tk.Text(self)
def _widgets_layout(self):
self.label.pack(fill='x', expand=True)
self.text.pack(fill='both', expand=True)
@staticmethod
def bind_events_on_widget_to_callback(events, widget, callback):
""" Bind events on widget to callback.
"""
for _event in events:
widget.bind(_event, callback)
def update_char_len(self, event):
""" Update self.label's text with character length of content
in self.text.
"""
self.label['text'] = len(self.text.get('1.0', 'end-1c'))
if __name__ == '__main__':
root = tk.Tk()
text_frame = TextWithCharLength(root)
text_frame.pack()
root.mainloop()