我得到了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;键增加了行数?
答案 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()