python - 突出显示时如何删除文本现有的背景颜色?

标签 python colors background tkinter highlight

我正在用 Python 编写一个小实用程序,它可以对文本进行一些模式匹配。与用户输入的模式匹配的文本将以黄色突出显示。

我正在使用 Tkinter Text 实现这一点小部件,并在名为 "match" 的文本小部件上设置一个标记。给出任何带有标签名称 "match" 的文本黄色背景。

这一切看起来都不错,除了当我尝试使用鼠标突出显示文本时(例如,当想要复制/粘贴时)。当我用鼠标突出显示文本时,任何已经具有黄色背景的标记文本都会保留其黄色背景,即使在突出显示之后也是如此。这意味着当鼠标突出显示文本时,您无法正确阅读文本,因为黄色背景上的白色文本(鼠标突出显示时文本变为白色)对比度不佳。

我希望发生的是,当我使用鼠标突出显示文本小部件中的文本时,所有文本都会获得标准的蓝色背景颜色/白色文本颜色,就像您通常在 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")

但这并没有奏效。

最佳答案

标签具有优先权。具有高优先级的标签比具有较低优先级的标签具有优先权。当您选择文本范围时,它会被赋予标签“sel”。您只需将“sel”标记的优先级提高到高于“match”标记的优先级即可:

w.tag_raise("sel")

亚历克斯·马泰利(Alex Martelli)在评论中写道“如果他设置highlightbackground而不是selectbackground,那么OP绝对不会有任何好处”,但这是不正确的。虽然他认为设置突出显示背景与选择无关,但它与此解决方案无关。

提高“sel”标签的优先级可以与原始问题中的代码一起使用,无论是否添加设置highlightbackground的代码。

有关文本小部件的更多信息,请查看 text widget tutorial on tkdocs.com 。它有 Tcl、Python、Ruby 和 Perl 的代码示例。

关于python - 突出显示时如何删除文本现有的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1515809/

相关文章:

python - Pandas :绕过数字索引

R:多种颜色的猫

android - 如何在COCOS2D android中设置背景?

WPF 后台渲染控件

python - 避免捕获异常的更快方法

python /dpkt : Find out if packet is a tcp packet or a udp packet ,

python - 基于另一列过滤 pandas 数据框

java - 将 Swing 颜色扩展到自定义组件

javascript - 如何全局存储颜色,以便它们在 js、css 和 html 中可见?

java - swing gui 闪烁白色错误