[英]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.