有没有更简单的方法可以在python中制作一个带行计数器的文本编辑器



我正在开发一个程序的测试版,稍后将作为开源软件发布。

我想问你,目前是否有任何简单的方法可以制作一个带有行计数器的文本编辑器,但加载在python tkinter框架中。我在8年前就看到了这个答案(Tkinter在文本小部件中添加了行号(,但我很难理解它是如何工作的,我也很难将它适应我的代码。

我非常感谢你的评论。

这是我的GUI

一个低技术的解决方案是让一个函数每秒运行一到两次,以获取行数并更新标签。

例如,假设您有一个名为editor的文本小部件和一个名称为line_count的标签,该函数可能看起来像这样:

def update_line_count():
lines = editor.index("end-1c").split(".")[0]
line_count.configure(text=f"lines: {lines}")
root.after(500, update_line_count)

如果你调用该函数一次,只要程序在运行,它就会继续每500ms运行一次。函数本身只需要几分之一毫秒就可以运行,因此不会增加明显的负载。

下面是一个完整的工作示例:

import tkinter as tk
root = tk.Tk()
editor_frame = tk.Frame(root)
status_frame = tk.Frame(root)
status_frame.pack(side="bottom", fill="x")
editor_frame.pack(side="top", fill="both", expand=True)
scrollbar = tk.Scrollbar(editor_frame, orient="vertical")
editor = tk.Text(editor_frame, yscrollcommand=scrollbar.set, wrap="word")
scrollbar.configure(command=editor.yview)
scrollbar.pack(side="right", fill="y")
editor.pack(side="left", fill="both", expand=True)
line_count = tk.Label(status_frame, width=12, bd=1, relief="sunken")
line_count.pack(side="right")
def update_line_count():
lines = editor.index("end-1c").split(".")[0]
line_count.configure(text=f"lines: {lines}")
editor.after(500, update_line_count)
update_line_count()
root.mainloop()

相关内容

最新更新