如何在 Tkinter 文本框中查找搜索字符串的行号,然后在之前插入字符串

How to find line number of searched string in Tkinter Textbox and then insert string just before

假设我有一个像这样的 tkinter 文本框:

文本框=

Hello world !
Life is good on earth
Winter is already there

如何搜索 "good"、获取行号并在行号之前插入内容?

预期结果:

Hello world !
New sentence inserted here
Life is good on earth
Winter is already there

我知道如何使用 .find("good") 方法在达到“良好”之前获取字符数,但是因为我希望能够使用 textbox.insert() 我需要行号(不是字符数)像 1.0 来指定我想在文本框中插入新句子的位置。

你可以玩一下 tkinter 索引:

from tkinter import *
 
root = Tk()
fram = Frame(root)
Label(fram,text='Text to find:').pack(side=LEFT)
edit = Entry(fram)
edit.pack(side=LEFT, fill=BOTH, expand=1)
edit.focus_set()
butt = Button(fram, text='Find') 
butt.pack(side=RIGHT)
fram.pack(side=TOP)
text = Text(root)
text.insert('1.0','''Hello world !
Life is good on earth
Winter is already there''')
text.pack(side=BOTTOM)
 
def find():
    s = edit.get()
    if s:
        idx = '1.0'
        idx = text.search(s, idx, nocase=1, stopindex=END)
        if idx:
            text.insert(idx.split('.')[0]+'.0', 'New sentence inserted here\n')
    edit.focus_set()
butt.config(command=find) 
root.mainloop()

您可以使用 linestart 修改索引以获取行的开头。

例如假设变量index包含匹配的字符位置,比如2.8,可以这样获取行首:

f"{index} linestart"  # eg: "2.8 linestart"

在您的代码中,它可能看起来像这样:

index = text.search("good", "1.0", "end")
text.insert(f"{index} linestart", "New sentence inserted here\n")