2017-11-09 3 views
0

私はWindows 7マシンでpython 3.4を使用しています。Tkinter Textウィジェットの選択されたタグ付き領域を強調表示

大量のデータを持つtkinter.scrolledtext.ScrolledTextウィジェットを使用しています。私は異なるテキストの前景の色を持つタグで別の領域を設定し、これはうまく動作します。私は一度これを行うと気付きました。また、クリップボードにコピーしたいテキストの領域を選択します。この領域には、選択されているハイライトの色が表示されません。私はそれをクリップボードにコピーすることはできますが、選択色でどのように反映するのか分かりません。これは、タグ付きテキストの領域にのみ影響します。タグにハイライトを設定する方法はありますか、タグをイベントにバインドして自分で設定する必要がありますか?ウィジェット上でselectbackgroundを設定しようとしましたが、タグ付けされていない領域にのみ影響します。

答えて

1

文字の範囲を選択すると、tkinterは"sel"タグを選択した範囲に追加します。

タグには優先度があります。したがって、文字に背景を変更する2つのタグがある場合は、最も優先度の高いタグが使用されます。タグの優先順位は、タグが作成された順序によって最初に決定されます。つまり、作成するすべてのタグの優先度は、"sel"タグよりも高くなります。

解決策は、"sel"タグの優先度を上げて、カスタムタグより優先させることです。テキストウィジェットのtag_raiseメソッドでこれを行います。

次の例は、この点を示しています。 tag_raiseへの呼び出しをコメントアウトした場合の動作の違いに注目してください。

import tkinter as tk 

root = tk.Tk() 
text = tk.Text(root, height=10, wrap="word") 
text.pack(fill="both", expand=True) 

text.tag_configure("warning", background="red", foreground="white") 
text.tag_raise("sel") 

text.insert("1.0", "Danger Will Robinson! You have to manage the priority" 
      " of tags to get the right effect.") 
text.tag_add("warning", "1.0", "1.21") 

root.mainloop() 
関連する問題