突出显示Tkinter Text Widget的选定标记区域

时间:2017-11-09 15:39:15

标签: python-3.x tkinter tags

我在Windows 7机器上使用python 3.4。

我正在使用带有大量数据的tkinter.scrolledtext.ScrolledText小部件。我已经设置了不同的区域,标签具有不同的文本前景色,这很好。我注意到,一旦我这样做,我选择了一个我要复制到剪辑板的文本区域,该剪辑板也被标记为没有显示高亮颜色以反映它的选择。我可以很好地将它复制到剪辑板,但我无法弄清楚如何通过选择颜色来反映它。这仅影响带有标签的文本区域。有没有办法在标签上设置突出显示,或者我是否需要将标签绑定到事件并自行设置?我尝试在小部件上设置selectbackground,但它只影响未标记的区域。

1 个答案:

答案 0 :(得分:1)

当您选择一系列字符时,tkinter会将标记"sel"添加到所选范围。

标签具有优先级,因此如果字符有两个更改背景的标签,则具有最高优先级的标签就是使用的标签。标签的优先级最初由创建标签的顺序决定。这意味着您创建的每个代码的优先级都高于"sel"代码。

问题的解决方案是提高"sel"代码的优先级,使其优先于您的自定义代码。您可以使用文本小部件的tag_raise方法执行此操作。

以下是一个说明这一点的例子。如果您注释掉tag_raise的调用,请注意行为上的差异:

import tkinter as tk

root = tk.Tk()
text = tk.Text(root, height=10, wrap="word")
text.pack(fill="both", expand=True)

text.tag_configure("warning", background="red", foreground="white")
text.tag_raise("sel")

text.insert("1.0", "Danger Will Robinson! You have to manage the priority"
            " of tags to get the right effect.")
text.tag_add("warning", "1.0", "1.21")

root.mainloop()