更改tkinter文本框小部件中每隔一行文本的背景色



我有一个文本框小部件,我只使用它来打印调试数据,我想更改文本框小程序中每行文本的背景颜色,使其更易于阅读。我一直在研究如何使用文本框小部件突出显示文本,但似乎不知道如何更改每一行的背景色。有可能做到这一点吗?

到目前为止,我已经尝试过使用标签,但我认为我误解了如何使用它们或其他什么,因为我很难得到任何结果。我在谷歌上搜索时发现了一些关于突出显示特定单词的问题,我找不到任何类似的场景。

如果有人知道我可以寻找一些资源,或者可以为我指明正确的方向,那将是非常棒的。举个例子会更好,但我不希望有人为我做腿部工作。

谢谢!

标签允许您更改一系列文本的背景和前景色(以及一些其他属性)。

如果一次添加一行数据,则可以在每次插入时应用一个标记,只需为每行交替使用标记即可。例如,第一个插入使用标签"奇数",第二个插入使用"偶数",第三个插入使用标记"奇数"等等

如果在块中插入数据,则可以计算起始行号和结束行号,然后对每一行进行迭代以应用标记。

下面是第一种技术的例子:

import Tkinter as tk
class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.text = tk.Text(self, wrap=None)
        self.vsb = tk.Scrollbar(self, command=self.text.yview, orient="vertical")
        self.text.configure(yscrollcommand=self.vsb.set)
        self.vsb.pack(side="right", fill="y")
        self.text.pack(side="left", fill="both", expand=True)
        self.text.tag_configure("even", background="#e0e0e0")
        self.text.tag_configure("odd", background="#ffffff")
        with open(__file__, "r") as f:
            tag = "odd"
            for line in f.readlines():
                self.text.insert("end", line, tag)
                tag = "even" if tag == "odd" else "odd"

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.mainloop()

以下是一种在事实之后添加突出显示的方法:

def highlight(self):
    lastline = self.text.index("end-1c").split(".")[0]
    tag = "odd"
    for i in range(1, int(lastline)):
        self.text.tag_add(tag, "%s.0" % i, "%s.0" % (i+1))
        tag = "even" if tag == "odd" else "odd"

最新更新