【问题标题】:Tagging in a text widget - tkinter在文本小部件中添加标签 - tkinter
【发布时间】:2016-03-13 23:30:58
【问题描述】:

我在理解如何让标签在我的特定应用程序上工作时遇到了一些麻烦,我有一个名为“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 一个月的新手来说是一个很好的挑战。不过很享受:)

上面的结果现在给了我

【问题讨论】:

  • 请展示一些代码来说明您尝试过的内容。突出显示文本有据可查,stackoverflow 和其他网站上有大量示例。
  • 嗨,Bryan,已更新为包含一些代码,目前我正在尝试让它工作,所以它很可能非常粗糙

标签: python python-3.x tkinter tags


【解决方案1】:

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

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

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

insert 命令的第一个参数必须是索引,下一个参数必须是文本。之后的任何参数都以标签和文本的形式交替出现。在您的情况下,文本是descPN 的值,然后是一个名为“end”的标记(END 常量的值)、一个空格、“end”m 的标记,然后是文本@987654328 @。

其次,你永远不会配置标签“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")

【讨论】:

  • 我正在尝试通过在任何操作之前先获取适当的文本以突出显示的小步骤,但没有意识到需要额外的步骤。感谢您指出这一点,不幸的是,我寻找的示例在解释事情如何工作时似乎并不太友好:)
  • self.dwgoutputbox.insert(INSERT, descDwg1, "end", "", "end", " Issue: ", "end", descIss1, "end", "\n")想验证这是对插入语句的正确使用,它显示正确,但我对它的错误使用也是如此。
  • @LesM76:这取决于您对“正确”的定义。是的,这是有效的语法。它没有做你认为它正在做的事情。在您发布的代码中,"end" 是一个标签,而不是一个索引。我怀疑你有一个名为"end" 的标签。如果您确实有一个名为“end”的标签,那是正确的。如果你不这样做,并且你认为"end" 代表小部件的结束,那么它是不正确的。
  • 你对后者是完全正确的。这个插入和标记的东西对于新手来说非常混乱,我会去那里的 :)
猜你喜欢
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多