1

テキストのパターン マッチングを行う小さなユーティリティを Python で作成しています。ユーザーが入力したパターンに一致するテキストは、黄色で強調表示されます。

私は Tkinter ウィジェットを使用してこれを達成し、タグ名を持つテキストに黄色の背景 を与えるTextという名前の Text ウィジェットにタグを設定しています。"match""match"

マウスを使用してテキストを強調表示しようとする場合 (たとえば、コピー/貼り付けする場合) を除いて、これはすべて見栄えがします。マウスでテキストを強調表示すると、既に黄色の背景を持つタグ付きテキストは、強調表示された後でも黄色の背景を保持します。これは、黄色の背景に白いテキスト (マウスでハイライトするとテキストが白くなる) はコントラストが悪いため、マウスでハイライトしたときにテキストを正しく読み取ることができないことを意味します。

マウスを使用して Text ウィジェットのテキストを強調表示すると、すべてのテキストが、セクションを強調表示するときに Windows マシンで通常取得する標準の青色の背景色/白色のテキスト色になります。テキストの。

私が何を意味するかを示すための簡単なコードスニペットを次に示します。

from tkinter import *

root = Tk()

w = Text(root)
w.tag_config("match",background="yellow")
w.config(highlightbackground="red")
w.pack()
w.insert(INSERT,"some non-matching text.")
w.insert(INSERT,"some matching text.","match")

root.mainloop()

これを実行し、テキスト ウィジェット内のすべてのテキストを強調表示すると、背景が黄色のテキストが非常に読みにくくなることがわかります。

上記のコード スニペットでは、次を使用してハイライトの背景色を変更しようとしたことに注意してください。

w.config(highlightbackground="red")

しかし、これはうまくいきませんでした。

4

2 に答える 2

0

を設定する必要があると思いますがselectbackground、これはまったく異なるものを意味するものではありませんhighlightbackground(ウィジェットがフォーカスされたときにウィジェットの周りに描画される「ハイライト長方形」の背景色)。ただし、sel疑似タグ(選択を表すもので、「ハイライト」と呼んでいると思います)は、ユーザーが作成したタグなどの「下」にあると思いますmatchselその場合、疑似タグ (別名)の背景色ではなく、ユーザーが作成したタグの背景色が表示されselectbackgroundます。

<Selection>Tk 8.5では、適切に色付けされたユーザー タグを pseudo-tag の「上」に配置する関数を疑似イベントにバインドすることで、これを修正できselます。ただし、Tk 8.4 にはそのようなイベントはありません。これは、現在使用している可能性が最も高いものです。 TK のドキュメントによると、8.5 には Python for Windows の ActiveState ディストリビューションの Python 3.1 が付属しています。残念ながら、他のプラットフォームまたは Python の他のバージョンに関する "TODO" プレースホルダーしかありません。関心のある特定のプラットフォームおよび Python バージョン用の Tk 8.5 を入手する最善の方法がわかりません。

于 2009-10-04T16:42:59.517 に答える