如何在Tkinter文本小部件中将选定的文本显示在最前面?

时间:2018-12-07 20:02:54

标签: python tkinter

我有一个文本小部件,可在其中显示一些数据。我以不同的颜色插入文本,以便更好地分隔插入的行。但是,现在当我在“文本”小部件中选择文本时,所选文本的背景色不再可见。默认值为选中的文本具有浅灰色背景和黑色文本,但在我的情况下,仅显示黑色文本。

我以这种方式制作了自定义背景色:

self.txt = tk.Text(self.midframe, wrap=tk.NONE, yscrollcommand=yscrollbar.set, fg="white", bg="black")
self.txt.tag_configure("even_line", background="#13001a")
self.txt.tag_configure("odd_line", background="#001a00")

...

self.txt.insert(tk.END, header, "odd_line")
for i, line in enumerate(history):
    if i % 2 == 0:
        self.txt.insert(tk.END, line, "even_line")
    else:
        self.txt.insert(tk.END, line, "odd_line")

另请参见下面的小视频链接中发生的情况。在第一种情况下,文本中的所有行都有自定义背景。当我按“作业历史记录”时,只有奇数行具有自定义背景。

enter image description here 在这里,您看到的文字在消失后似乎消失了。

enter image description here 在这种情况下,在禁用偶数行背景标记的情况下,我们可以在一半的行上看到选定的文本。

那我该如何解决呢?

1 个答案:

答案 0 :(得分:1)

由于任何给定范围的文本都可以具有多个标签,因此tkinter需要一种方法来知道哪个标签优先。它通过分配优先顺序来做到这一点。默认情况下,以后创建的标签比以前创建的标签具有更高的优先级。

所选内容由带有“ sel”标签的一系列文本表示。为了使此标签优先于您的自定义标签,您需要将其优先级提高到高于您创建的标签。您可以使用tag_raisetag_lower方法来调整此优先级。

例如,要确保“ sel”标签具有最高优先级,可以在创建所有其他标签后执行以下操作:

self.txt.tag_raise("sel")