我正在Python中编写一个小实用程序,它可以对文本进行一些模式匹配。与用户输入的模式相匹配的文本将突出显示为黄色。如何在高亮显示时删除文字的现有背景颜色?
我实现这个使用Tkinter的Text
小部件,并建立名为"match"
文本控件,让使用标记的名字"match"
黄色背景的任何文本标签。
这一切看起来不错,除非我尝试使用鼠标突出显示文本(例如,当想要复制/粘贴时)。当使用鼠标突出显示文本时,任何已经具有黄色背景的标记文本即使突出显示后仍保留其黄色背景。这意味着,当鼠标突出显示文本时,无法正确读取文本,因为在黄色背景上显示的白色文本(在鼠标突出显示时文本变为白色)会提供较差的对比度。
我想要发生的是,当我使用鼠标突出显示Text小部件中的文本时,所有文本都会获得您通常在Windows机器上获得的标准蓝色背景颜色/白色文本颜色突出显示一段文字时。
这里有一个快速的代码片段展示了我的意思:
from tkinter import *
root = Tk()
w = Text(root)
w.tag_config("match",background="yellow")
w.config(highlightbackground="red")
w.pack()
w.insert(INSERT,"some non-matching text.")
w.insert(INSERT,"some matching text.","match")
root.mainloop()
如果你运行它,然后突出显示所有在文本插件的文字,你会看到黄色背景的文本变得很难阅读。
注意,在上述代码段中我试着改变使用重点背景色:
w.config(highlightbackground="red")
但是,这并没有奏效。
虽然你写的技术上是正确的,但如果他设置了highlightbackground而不是selectbackground(基本上,你需要这个答案_plus_我的第一段;-),那么它绝对没有好处。 – 2009-10-04 17:15:07
你错了。我的解决方案通过或不通过配置highlightbackground或selectbackground来解决他的问题。我认为你只是因为我低估了你而低估了我。不同之处在于,我的解决方案适用于您的非解决方案。 – 2009-10-04 18:40:18
我必须赞同布赖恩 - 使用w.tag_raise(“sel”)就是我在原始问题中提供的示例所需的全部内容。 – 2009-10-05 02:36:43