不要获取所有文本然后进行计数,只需获取最后一个减一字符的索引即可index("end-1c")
然后进行一些字符串操作来获取行号。
至于为什么数量没有增加,是因为你的绑定发生了before返回键已插入。对于您的简单测试,您可以通过绑定来解决此问题<KeyRelease>
,因为字符是在印刷机上插入的。
import Tkinter as Tk
def countlines(event):
(line, c) = map(int, event.widget.index("end-1c").split("."))
print line, c
root = Tk.Tk()
root.geometry("200x200")
a = Tk.Text(root)
a.pack()
a.bind("<KeyRelease>", countlines)
root.mainloop()
如果您需要在按键时打印值,则必须使用称为“bindtags”的高级功能。对此问题的回答中简要介绍了绑定标签:关于 tkinter 中绑定标签的基本查询 https://stackoverflow.com/questions/11541262/basic-query-regarding-bindtags-in-tkinter/11542200#11542200。简而言之,您必须创建一个出现在类绑定标签之后的自定义绑定标签,以便您的绑定发生在类绑定之后。
以下是修改程序以使用绑定标签的方法:
import Tkinter as Tk
def countlines(event):
(line, c) = map(int, event.widget.index("end-1c").split("."))
print line, c
root = Tk.Tk()
root.geometry("200x200")
a = Tk.Text(root)
a.pack()
bindtags = list(a.bindtags())
bindtags.insert(2, "custom")
a.bindtags(tuple(bindtags))
a.bind_class("custom", "<Key>", countlines)
root.mainloop()