在文本小部件中标记 - tkinter

时间:2016-03-13 23:30:58

标签: python python-3.x tkinter tags

我在理解如何让标签在我的特定应用程序上工作时遇到一些麻烦,我所拥有的是一个名为“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

1 个答案:

答案 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")