我在理解如何让标签在我的特定应用程序上工作时遇到一些麻烦,我所拥有的是一个名为“dwgoutputbox”的文本小部件,它在读取CSV文件后显示了许多字段
在这个例子中,dwgoutputbox
文本小部件显示了许多字符串变量descDwg1,descDwg2,descDwg3
,它们是第一列中的项目,后跟“问题”数字,这是其他变量
我正在尝试让第一列中的项目突出显示,以便最终我可以将它们点击,因为它们将链接到文件。
由于第一列中的项目会发生变化,具体取决于CSV搜索(但保留以下常规格式)我不确定如何使tag_config正常工作
self.outputQty.insert(INSERT,descQty)
self.outputDesc.insert(INSERT,descPN, END," ", END, descInfo)
self.dwgoutputbox.insert(INSERT, descDwg1, END, " ", END, " Issue: ",END,descIss1,END, "\n")
self.dwgoutputbox.insert(INSERT, descDwg2, END, " ", END, " Issue: ",END,descIss2,END, "\n")
self.dwgoutputbox.insert(INSERT, descDwg3, END, " ", END, " Issue: ",END,descIss3,END, "\n")
format_link()
def format_link(dwgoutputbox,tag,apply_tag):
self.dwgoutputbox.tag_config(tagName="19",foreground="blue",underline=1)
dwgoutputbox.tag_bind(tag,"<Button-1>",apply_tag)
好的,设法让它按预期工作,主要是由于Bryan Oakley的帮助和耐心 - 谢谢你非常感谢。
self.dwgoutputbox = Text(root, borderwidth=0, width=50, height=15, foreground="#ffffff",background="#3F3F3F", font="system_font 10")
self.dwgoutputbox.grid(row=3, column=2, columnspan=5, padx=2, pady=3)
self.dwgoutputbox.tag_config("dwg",foreground="lightblue")
self.dwgoutputbox.insert(1.0, descDwg3, "dwg", " Issue: ", "", descIss3, "", "\n")
self.dwgoutputbox.insert(1.0, descDwg2, "dwg", " Issue: ", "", descIss2, "", "\n")
self.dwgoutputbox.insert(1.0, descDwg1, "dwg", " Issue: ", "", descIss1, "", "\n")
我的一半问题是对于更高级的东西似乎没有很多/任何好的“基本”解释,这给一个玩python的新手带来了一个很好的挑战。享受它虽然:)
上面的结果现在给了我 regex101.com
答案 0 :(得分:3)
您的代码中至少存在两个问题。
首先,您错误地使用了insert语句。这是你的代码:
self.outputDesc.insert(INSERT,descPN, END," ", END, descInfo)
insert
命令必须将索引作为其第一个参数,然后将text作为下一个参数。替换后的任何参数作为标记和文本。在您的情况下,文本是descPN
的值,然后是名为“end”的标记(END
常量的值),空格,“end”m的标记,然后文字descInfo
。
其次,您永远不会配置标记“end”。但是,您可以配置名为19
的标记,但您不会将该标记应用于任何文本。您需要将标记与insert
语句一起使用,或使用tag_add
语句。
您需要做两件事来使用标记来突出显示文本小部件中的文本:您必须将标记配置为具有您想要的任何属性(颜色,字体等),并且必须将该标记添加到范围文本。
您可以使用tag_configure
配置代码。例如,要使用名为“red”的标记为文本提供红色背景,您可以执行以下操作:
text_widget.tag_configure("red", background="red")
接下来,您需要将该标记应用于一系列文本。有两种方法可以做到这一点。首先,通过将标记作为参数包含在insert
命令中,可以在插入时将标记应用于文本:
text_widget.insert('end", "this text is red", "red")
第二种方法是将标记应用于范围。例如,要使第二行变为红色,您可以这样做:
text_widget.tag_add("red", "2.0", "2.0 lineend")