我有一个文本小部件,可在其中显示一些数据。我以不同的颜色插入文本,以便更好地分隔插入的行。但是,现在当我在“文本”小部件中选择文本时,所选文本的背景色不再可见。默认值为选中的文本具有浅灰色背景和黑色文本,但在我的情况下,仅显示黑色文本。
我以这种方式制作了自定义背景色:
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")
另请参见下面的小视频链接中发生的情况。在第一种情况下,文本中的所有行都有自定义背景。当我按“作业历史记录”时,只有奇数行具有自定义背景。
在这种情况下,在禁用偶数行背景标记的情况下,我们可以在一半的行上看到选定的文本。
那我该如何解决呢?
答案 0 :(得分:1)
由于任何给定范围的文本都可以具有多个标签,因此tkinter需要一种方法来知道哪个标签优先。它通过分配优先顺序来做到这一点。默认情况下,以后创建的标签比以前创建的标签具有更高的优先级。
所选内容由带有“ sel”标签的一系列文本表示。为了使此标签优先于您的自定义标签,您需要将其优先级提高到高于您创建的标签。您可以使用tag_raise
和tag_lower
方法来调整此优先级。
例如,要确保“ sel”标签具有最高优先级,可以在创建所有其他标签后执行以下操作:
self.txt.tag_raise("sel")