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

时间:2014-05-08 09:03:34

标签: python tkinter

在我的程序中的文本小部件中,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 个答案:

答案 0 :(得分:1)

这是一个很老的问题,但考虑到我今天偶然发现它寻找答案,其他有同样问题的人可能会喜欢这个更新。

我解决这个问题的方法是将标签配置中的 lmargincolor 选项设置为 Text 小部件的背景颜色。这将以该颜色绘制由 lmargin1/lmargin2 添加的边距(请参阅官方 manual)。

就我而言,这看起来像这样:

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

或者,您当然可以使用静态颜色,例如 #FFF

这对我来说就像一个魅力,产生了 this 外观(琥珀色背景文本是有问题的标签)。