在文本小部件中标记 - tkinter

Les*_*M76 4 python tags tkinter python-3.x

我在理解如何让标签在我的特定应用程序上工作时遇到了一些困难,我有一个名为“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)
Run Code Online (Sandbox Code Playgroud)

好的,成功使其按预期工作,这主要归功于 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")
Run Code Online (Sandbox Code Playgroud)

我的一半问题是,对于更高级的东西,似乎没有很多/任何好的“基本”解释,这对玩了一个月的 python 的新手来说是一个很好的挑战。不过很享受:)

上面的结果现在给了我 在此输入图像描述

Bry*_*ley 6

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

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

self.outputDesc.insert(INSERT,descPN, END," ", END, descInfo)
Run Code Online (Sandbox Code Playgroud)

insert命令必须将索引作为其第一个参数,然后将文本作为下一个参数。之后的任何参数都交替作为标签和文本。在您的例子中,文本是 的值descPN,然后是一个名为“end”的标签(常量的值END)、一个空格、“end”m 的标签,然后是文本descInfo

其次,你永远不会配置标签“end”。但是,您配置了一个名为 的标签19,但并未将该标签应用于任何文本。您需要将标签与insert语句一起使用,或者与tag_add语句一起使用。

使用标签突出显示文本小部件中的文本需要做两件事:必须将标签配置为具有所需的任何属性(颜色、字体等),并且必须将该标签添加到文本范围。

您可以使用 来配置标签tag_configure。例如,要使用名为“red”的标签为文本提供红色背景,您可以执行以下操作:

text_widget.tag_configure("red", background="red")
Run Code Online (Sandbox Code Playgroud)

接下来,您需要将该标签应用于一系列文本。有两种方法可以做到这一点。首先,您可以在插入文本时将标记应用到文本,方法是将标记作为参数包含到命令中insert

text_widget.insert('end", "this text is red", "red")
Run Code Online (Sandbox Code Playgroud)

第二种方法是将标签应用于范围。例如,要将第二行设置为红色,您可以这样做:

text_widget.tag_add("red", "2.0", "2.0 lineend")
Run Code Online (Sandbox Code Playgroud)