不要获取所有文本然后计数,只需获取带有index(“ end-1c”)的最后一个减一字符的索引,然后执行一些字符串操作即可获得行号.
至于为什么数量没有增加,是因为绑定是在插入返回键之前发生的.对于您的简单测试,您可以通过在< 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("", countlines)
root.mainloop()
如果需要在按键上打印值,则必须使用称为“ bindtags”的高级功能.该问题的答案中简要介绍了Bindtag:Basic query regarding bindtags in tkinter.简而言之,您必须创建一个自定义的bindtag,它出现在类bindtag之后,以便您的绑定发生在类绑定之后.
以下是修改程序以使用绑定标签的方法:
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", "", countlines)
root.mainloop()