Tkinter文本小部件中的边距获取背景颜色

2 投票
1 回答
881 浏览
提问于 2025-04-18 05:48

在我的程序中,有一个文本小部件,lmargin1和lmargin2用来根据文本的层级来设置缩进(这些是和tag_config一起使用的选项,比如说 lmargin1(距离)用于设置带有这个标签的文本块第一行的左边距。默认值是0(没有左边距))。

我遇到的问题是,我定义了一个高亮文本的标签,这个标签会改变背景颜色。所以如果一个缩进的文本使用了这个标签,背景颜色也会在边距的地方改变,比如:

#!/usr/bin/env python
from Tkinter import *

root = Tk()
configtext = Text(root, width=150)
configtext.pack()
configtext.tag_configure('n', lmargin1=45, lmargin2=45)
configtext.tag_configure('nh', lmargin1=45, lmargin2=45,  background="yellow", foreground="red")

con1="L'Italia è una Repubblica democratica, fondata sul lavoro. La sovranità appartiene al popolo" 
con2=" che la esercita nelle forme e nei limiti della Costituzione. La Repubblica riconosce e garantisce i diritti inviolabili dell'uomo"
con3=" sia come singolo sia nelle formazioni sociali ove si svolge la sua personalità, e richiede l'adempimento dei doveri inderogabili di solidarietà politica, economica e sociale.\n\n"
configtext.insert(INSERT,con1+con2+con3)
configtext.insert(INSERT,con1,'n')
configtext.insert(INSERT,con2,'nh')
configtext.insert(INSERT,con3,'n')
mainloop()

有没有办法避免在边距上也出现背景颜色呢?

1 个回答

1

这个问题虽然有点老了,但我今天碰到它,想找个答案,所以觉得更新一下可能对有同样问题的人有帮助。

我解决这个问题的方法是,在标签配置中设置 lmargincolor 选项为 Text 小部件的背景颜色。这样就会把通过 lmargin1/lmargin2 添加的边距涂成那个颜色(可以参考官方的手册)。

在我的情况下,代码看起来是这样的:

text_widget.tag_configure(
    tagName="warning",
    background="#ff9800",
    lmargin1=margin1
    lmargin2=margin2,
    lmargincolor=text_widget.cget("background")
)

当然,你也可以使用像 #FFF 这样的静态颜色。

这个方法对我来说效果很好,最终得到了这样的效果(背景是琥珀色的文字就是我提到的标签)。

撰写回答