我有一个文本框小部件,我只是用来打印调试数据,我想更改文本框小部件中每行文本的背景颜色,以便于阅读。我一直在研究如何使用文本框小部件突出显示文本,但似乎无法弄清楚如何获取每行要更改的背景颜色。有可能这样做吗?
到目前为止,我已尝试使用标签,但我认为我误解了如何使用它们,因为我无法获得任何结果。我在谷歌上进行的搜索提出了有关突出显示特定单词的问题,而且我找不到任何类似的方案可以解决。
如果有人知道我可以看到的一些资源,或者可以指出我正确的方向,那将是美好的。一个例子会更好,但我不希望任何人为我做腿部工作。
谢谢!
答案 0 :(得分:3)
标签允许您更改一系列文本的背景和前景色(以及一些其他属性)。
如果您一次添加一行数据,则可以为每个插入应用一个标记,并为每一行替换标记。例如,使用标签" odd"对于第一次插入,"偶数"对于第二个,"奇数"对于第三个,依此类推。
如果要在块中插入数据,则可以计算起始行和结束行号,然后遍历每一行以应用标记。
这是第一种技术的例子:
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"