获取Text tkinter小部件的行数

时间:2013-12-13 11:15:13

标签: python widget tkinter

我得到了tkinter Text小部件的行数,如下所示:

import Tkinter as Tk

def countlines(event):
    print float(event.widget.index(Tk.END))-1 
    print event.widget.get("1.0", Tk.END).count("\n")

root = Tk.Tk()
root.geometry("200x200")
a = Tk.Text(root)
a.pack()
a.bind("<Key>", countlines)

root.mainloop()

唯一的问题:当您点击<Return>时,行数不会增加。您需要添加一些更多的文本,以便增加行数。

如何制作&lt;返回&gt;键增加了行数?

1 个答案:

答案 0 :(得分:3)

不要获取所有文本然后计数,只需获取带有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("<KeyRelease>", countlines)

root.mainloop()

如果您需要在按键上打印值,则必须使用名为“bindtags”的高级功能。在这个问题的答案中简要介绍了Bindtags:Basic query regarding bindtags in tkinter。简而言之,您必须创建一个出现在类bindtag之后的自定义绑定标签,以便在绑定类之后进行绑定。

以下是修改程序以使用bindtags的方法:

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()