繁体   English   中英

基于Tkinter文本小部件中的第一个字符标记整个单词

[英]Tagging Whole Word Based on the First Character in a Tkinter Text Widget

我正在尝试根据第一个字符标记并突出显示整个单词。 在下面的示例中,我正在搜索主题标签“#”。 我要标记并突出显示后续字符,直到下一个空格为止。 因此,字符“ #hashtag”应全部突出显示为蓝色。 下面的代码查找主题标签并将其突出显示为蓝色,但不突出显示后续字符。 我认为问题是我没有在self.text_box.tag_add("hashtag{}".format(x), self.index, self.index + "wordend")正确使用"wordend" self.text_box.tag_add("hashtag{}".format(x), self.index, self.index + "wordend")但我无法弄清楚我在做什么错。

根据effbot.org

“ wordstart”和“ wordend”将索引移到当前单词的开头(结尾)。 单词是字母,数字和下划线或单个非空格字符的序列。 http://effbot.org/tkinterbook/text.htm

任何指针欢迎。

这是一些复制该问题的示例代码:

import tkinter as tk
import tkinter.scrolledtext as St

    class Main(tk.Tk):

    def __init__(self):

        tk.Tk.__init__(self)
        self.text = "random text\nrandom text\n#hashtag random text\n#hashtag"

        self.text_box = St.ScrolledText(self)
        self.text_box.pack()

        self.text_box.insert("1.0", self.text)

        self.index = self.text_box.search("#", "1.0", stopindex=tk.END)
        x = 0
        while self.index != "":
            self.text_box.tag_add("hashtag{}".format(x), self.index, self.index + "wordend")
            self.text_box.tag_configure("hashtag{}".format(x), foreground="blue")
            self.index += "+1c"
            self.index = self.text_box.search("#", self.index, stopindex=tk.END)
            x += 1

main=Main()
main.mainloop()

从规范的tcl / tk文档中:

单词由任意数量的相邻字符组成,这些字符可以是字母,数字或下划线, 也可以是单个字符,而不是其中之一 如果指定了display子修饰符,则仅检查非省略字符,否则将检查所有字符(是否被删除)。

在您的情况下,“ 3.0”之后的字符是# ,而不是其中的一个,因此单个字符被视为一个单词,因此“ wordend”修饰符在该单个字符之后停止。

如果您想为标签加上标签后面的单词,则第二个索引应采用“ line.char + 1c wordend ”(例如:“ 3.0 + 1c wordend”)的形式,以便查找该单词以哈希之后的第一个字符开头,而不是以哈希本身开头。

我通过更改tag.add其工作

self.text_box.tag_add("hashtag{}".format(x), self.index, (self.index + "+1c") + " wordend").

但是我不确定为什么需要在tag.add命令的末尾索引中添加额外的字符? 谁能解释?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM