我正在尝试根据第一个字符标记并突出显示整个单词。在下面的示例中,我正在搜索标签“#”。我想标记并突出显示后续字符,直到下一个空格。因此字符“#hashtag”应全部突出显示为蓝色。下面的代码找到了主题标签,并将其突出显示为蓝色,但不突出显示后续字符。我假设问题是我没有在"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()
答案 0 :(得分:1)
来自规范的tcl / tk文档:
单词由任意数量的相邻字符组成,字母,数字或下划线,或单个字符不是其中之一。如果给出了显示子修饰符,则仅检查非删除字符,否则将检查所有字符(是否删除)。
在你的情况下,“3.0”之后的字符是#
,这是“不是其中之一”,因此单个字符被认为是一个单词,因此“wordend”修饰符在该单个字符后停止。
如果你想要一个hashtag加上它后面的单词给你的标签,你的第二个索引应该是“ line.char + 1c wordend”的形式(例如:“3.0 + 1c wordend” “)这样你就可以查找以哈希之后的第一个字符开头的单词的结尾,而不是以哈希本身开头。
答案 1 :(得分:0)
我通过将tag.add
行更改为
self.text_box.tag_add("hashtag{}".format(x), self.index, (self.index + "+1c") + " wordend").
但是我不确定为什么我需要在tag.add
命令的结束索引中添加额外的字符?谁能解释一下?