2017-11-16 13 views
1

テキストボックス内の単語を強調表示するプログラムがありますが、同じ単語をもう一度クリックすると強調表示されます。これは可能ですか?以下は、単語がクリックされたときのことをするコードのセクションです。あなたが手伝ってくれることを願っています。使用して単語を強調表示してからtkinterを使ってハイライトします

def __init__(self, parent): 
     tk.Frame.__init__(self, parent) 
     self.text = tk.Text(self, wrap="none") 
     self.text.pack(fill="both", expand=True) 

     self.text.bind("<ButtonRelease-1>", self._on_click) 
     self.text.tag_configure("highlight", background="green", foreground="black") 

     with open(__file__, "rU") as f: 
      data = f.read() 
      self.text.insert("1.0", data) 

def _on_click(self, event): 
      self.text.tag_add("highlight", "insert wordstart", "insert wordend") 

私はそれを試みた :

def _on_click(self, event): 
    self.text.tag_remove("highlight", "1.0", "end") 
    self.text.tag_add("highlight", "insert wordstart", "insert wordend") 
    if self.text.tag_names == ('sel', 'highlight'): 
     self.text.tag_add("highlight", "insert wordstart", "insert wordend") 
    else: 
     self.text.tag_remove("highlight", "1.0", "end") 

が、それは運を持っていません。

+0

は、あなたが実際にいくつかのコードの単なる言い換えではなく、試したものをご提示ください。また、試していない場合は 'tag_remove'を使って" highlight "タグを削除してください。 –

+0

@BryanOakley私はあなたが要求した詳細を追加しました:) –

答えて

2

tag_namesを使用すると、特定のインデックスにあるタグのリストを取得できます。タグが現在の単語に存在するかどうかによって、tag_addまたはtag_removeを呼び出すだけです。

例:

import tkinter as tk 

class Example(object): 
    def __init__(self): 
     self.root = tk.Tk() 
     self.text = tk.Text(self.root) 
     self.text.pack(side="top", fill="both", expand=True) 
     self.text.bind("<ButtonRelease-1>", self._on_click) 
     self.text.tag_configure("highlight", background="bisque") 

     with open(__file__, "r") as f: 
      self.text.insert("1.0", f.read()) 

    def start(self): 
     self.root.mainloop() 

    def _on_click(self, event): 
     tags = self.text.tag_names("insert wordstart") 
     if "highlight" in tags: 
      self.text.tag_remove("highlight", "insert wordstart", "insert wordend") 
     else: 
      self.text.tag_add("highlight", "insert wordstart", "insert wordend") 

if __name__ == "__main__":  
    Example().start() 
+0

人生節約!ありがとうございました :) –

関連する問題