如何在 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")
假设我有一个像这样的 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")