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