簡體   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