python - 如何在 tkinter 文本小部件中为文本的当前长度制作多个标签
问题描述
我想在 tkinter Text 小部件中为 Text 的当前长度制作标签,但是我的代码在最后一个文本框中,所以我必须做什么?
from tkinter import *
win=Tk()
win.geometry("700x350")
text_all=[]
label_all=[]
for i in range(1,11):
text=Text(win, width=20, height=1, font=('Calibri 14'))
text.grid(row=i-1,column=0)
text_all.append(text)
label=Label(win, text="Total Characters", justify=CENTER, font=('11'))
label.grid(row=i-1, column=1)
label_all.append(label)
for i in range(1,11):
def update(event):
label_all[i-1].config(text="Total Characters: "+str(len(text_all[i-1].get("1.0", 'end-1c'))))
text_all[i-1].bind('<KeyPress>', update)
text_all[i-1].bind('<KeyRelease>', update)
win.mainloop()
解决方案
当update()
执行时, 的值i
将是 for 循环后的最后一个赋值,即 10。
您需要捕获所需的值i
并将此值传递给update()
使用参数默认值:
for i in range(1, 11):
def update(event, i=i):
label_all[i-1].config(text="Total Characters: "+str(len(text_all[i-1].get("1.0", 'end-1c'))))
...
您也可以将两个 for 循环合并为一个:
for i in range(1,11):
def update(event, i=i):
label_all[i-1].config(text="Total Characters: "+str(len(text_all[i-1].get("1.0", 'end-1c'))))
text=Text(win, width=20, height=1, font=('Calibri 14'))
text.grid(row=i-1,column=0)
text.bind('<KeyPress>', update)
text.bind('<KeyRelease>', update)
text_all.append(text)
label=Label(win, text="Total Characters", justify=CENTER, font=('11'))
label.grid(row=i-1, column=1)
label_all.append(label)
推荐阅读
- javascript - 找出如何作为客户端生成 onClick 属性?
- html - Bootstrap 5 导航栏设计与图标
- python - 将一个函数的返回值乘以另一个函数
- python - python添加到按aphabetically排序的列表中
- arduino - 发送数据后蓝牙 HC-05 和 Arduino 停止工作
- r - 如何计算R中混淆矩阵的特异性?
- performance - IO 大小与块大小?
- mysql - SQL 分组两列并选择最近的日期/时间戳
- amazon-web-services - aws api gateway - 如果使用 cloudformation,请求的资源上不存在“Access-Control-Allow-Origin”标头
- mysql - Sql返回具有相同check_id的多行并按相似的ref_no分组