Python 如何突出显示文本小部件tkinter中最后添加的文本
我想突出显示我的文本小部件中最后添加的文本。 我已经看到了一个与此相关的示例。问题是我添加了一个带有Python 如何突出显示文本小部件tkinter中最后添加的文本,python,tkinter,Python,Tkinter,我想突出显示我的文本小部件中最后添加的文本。 我已经看到了一个与此相关的示例。问题是我添加了一个带有“\n”的文本。这就是为什么程序将当前行看作一条新的线,因此它突出了空行。 你知道我如何修改程序吗?这是我的密码 import time import tkinter as tk from threading import Thread class MyApp: def __init__(self, master): self.master = master self.tex
“\n”
的文本。这就是为什么程序将当前行看作一条新的线,因此它突出了空行。
你知道我如何修改程序吗?这是我的密码
import time
import tkinter as tk
from threading import Thread
class MyApp:
def __init__(self, master):
self.master = master
self.text = tk.Text(self.master)
self.text.pack(side="top", fill="both", expand=True)
self.text.tag_configure("current_line", background="#e9e9e9")
self.start_adding_text()
self._highlight_current_line()
def start_adding_text(self):
thrd1 = Thread(target=self.add_tex)
thrd1.start()
def add_tex(self):
text = "This is demo text\n"
for _ in range(20):
self.text.insert(tk.END, text)
time.sleep(0.1)
return
def _highlight_current_line(self, interval=100):
'''Updates the 'current line' highlighting every "interval" milliseconds'''
self.text.tag_remove("current_line", 1.0, "end")
self.text.tag_add("current_line", "insert linestart", "insert lineend+1c")
self.master.after(interval, self._highlight_current_line)
if __name__ == '__main__':
root = tk.Tk()
app = MyApp(master=root)
root.mainloop()
您的函数
\u highlight\u current\u line
正在执行它应该执行的操作:它高亮显示插入光标的行。但是,您需要突出显示最后插入的文本,这是不同的。您只需创建一个新标记。
让我们把它命名为“最后一次插入”:
self.text.tag_configure("last_insert", background="#e9e9e9")
添加文本时,可以指定附加到插入文本的标记:
self.text.insert(tk.END, text, ('last_insert',))
当然,如果只想突出显示最后插入的文本,可以添加以下内容:
self.text.tag_remove("last_insert", 1.0, "end")
备注:tkinter函数
tag\u add
作为参数tag
,start
,end
,其中start
和end
是字符串形式的文本索引'a.b'
,其中a
是行索引(从顶部的1开始)而b
是此行中的字符(以0开头)。您可以使用表达式修改索引(请参见此处:。此外,“插入”是一个标记(在前面的链接中读取)-“insert linestart”
由索引“line.0”替换为tkinter
其中行
是插入光标当前所在的行。您的函数\u highlight\u current\u行
正在做它应该做的事情:它高亮显示插入光标的行。但是您想要的是高亮显示最后插入的文本,这是不同的。您可以简单地创建一个新标记。
让我们把它命名为“最后一次插入”:
self.text.tag_configure("last_insert", background="#e9e9e9")
添加文本时,可以指定附加到插入文本的标记:
self.text.insert(tk.END, text, ('last_insert',))
当然,如果只想突出显示最后插入的文本,可以添加以下内容:
self.text.tag_remove("last_insert", 1.0, "end")
备注:tkinter函数
tag\u add
作为参数tag
,start
,end
,其中start
和end
是字符串形式的文本索引'a.b'
,其中a
是行索引(从顶部的1开始)而b
是此行内的字符(以0开头)。您可以使用表达式修改索引(请参见此处:。此外,“insert”是一个标记(在前面的链接中读取)“insert linestart”由tkinter替换为索引“line.0”
其中行
是插入光标当前所在的行。您可以检查是否在最后一行并删除换行:
def add_tex(self):
loop_times=20
text = "This is demo text\n"
for id,_ in enumerate(list(range(loop_times))):
if id==loop_times-1:
text = "This is demo text"
self.text.insert(tk.END, text)
time.sleep(0.1)
return
您可以检查是否在最后一行并删除换行:
def add_tex(self):
loop_times=20
text = "This is demo text\n"
for id,_ in enumerate(list(range(loop_times))):
if id==loop_times-1:
text = "This is demo text"
self.text.insert(tk.END, text)
time.sleep(0.1)
return