在文本小部件中标记 - tkinter

Tagging in a text widget - tkinter

我在理解如何让标签在我的特定应用程序上工作时遇到一些问题,我有一个名为 'dwgoutputbox' 的文本小部件,它在读取 CSV 文件后显示多个字段

在此实例中,dwgoutputbox 文本小部件显示多个字符串变量 descDwg1,descDwg2,descDwg3,它们是第一列中的项目,后跟 'issue' 数字,它们是其他变量

我试图让第一列中的项目突出显示,以便最终我可以使它们可点击,因为它们将 link 到文件。

由于第一列中的项目会发生变化,具体取决于 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")

我的一半问题是似乎没有很多/任何好的 'basic' 解释更高级的东西,这给玩了一个月 python 的新手一个很好的挑战。不过很享受:)

上面的结果现在给了我

您的代码中至少有两个问题。

首先,您错误地使用了 insert 语句。这是您的代码:

self.outputDesc.insert(INSERT,descPN, END," ", END, descInfo)

insert 命令必须将索引作为第一个参数,然后将文本作为下一个参数。之后的任何参数交替作为标签和文本。在你的例子中,文本是 descPN 的值,然后是一个名为 "end" 的标签(END 常量的值),一个 space,"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")