我正在尝试将文本插入到Tkinter文本小部件中。每个插入的行都将包含people的用户名,如果该用户是我们研究组的一部分,我想用红色文字标记该行。
我已经在其创建时直接配置了标签,就像这样
self.txt.tag_configure("ingroup", foreground="#FF0000")
然后,当我开始插入文本时,我有一个条件子句,用于评估当前用户是否属于该组:
group = ["member1", "member2", "member3", "member4"]
for i,u in enumerate(user):
if u in group:
self.txt.tag_add("ingroup", "{}.0".format(i), "{}.{}".format(i, tk.END))
self.txt.insert(tk.END, u)
这可以按预期工作,只是将标记添加到用户上方的行,我认为这是因为“文本”小部件中的第一个行索引为1。但是,仅向行索引添加一个行将导致标记根本没有应用。
group = ["member1", "member2", "member3", "member4"]
for i,u in enumerate(user):
if u in group:
self.txt.tag_add("ingroup", "{}.0".format(i+1), "{}.{}".format(i+1, tk.END))
self.txt.insert(tk.END, u)
为什么会这样?我可以安全地使用i-1
,然后将标记应用到我感兴趣的行上方的第二行。我无法向i
添加任何内容,因此不应用标记。 tag_add
方法不能接受尚未创建循环的i
的值吗?
我注意到我只是显式地插入正确的行号,然后按预期工作。