idleはtag_configを使用してカラーPythonコードを構文解析し、過去15年間のすべてのPythonバージョンと主要OSで動作します。
なぜ失敗するのかを知るには、失敗したMCVEが必要です。チックスとスクロールバーを使わずに始める。 (Tixは3.6では推奨されておらず、バグは修正されていません)また、コードは各選択に同じタグを使用しているので、設定を変更すると以前のすべての選択に適用されます。
これは、意図したとおりに動作するように単純化されたコードです。
import tkinter as tk
import time
root = tk.Tk()
text = tk.Text(root)
text.pack()
text.insert('1.0', "line 1\nline 2\nline 3\n")
text.tag_add('bg', '1.0', '1.4')
text.tag_config('bg', background='red')
root.update()
time.sleep(1)
text.tag_add('bg', '2.0', '2.4')
text.tag_config('bg', background='blue')
root.update()
問題を再現するか、必要なものが得られるまで段階的に修正してみることができます。
例を変更してEDIT:ハードコードされたインデックスの代わりに 'sel.first'と 'sel.last'を使用します。
import tkinter as tk
import time
root = tk.Tk()
text = tk.Text(root)
text.pack()
text.insert('1.0', "line 1\nline 2\nline 3\n")
root.update() # make text visible for selection
input('select some text')
text.tag_add('bg', 'sel.first', 'sel.last')
text.tag_config('bg', background='red')
root.update() # make change visible
input('select some text')
text.tag_add('bg', 'sel.first', 'sel.last')
text.tag_config('bg', background='blue')
root.update() # make 2nd change visible
input('look at result')
コンソールで実行します。コンソールとGUIの両方が見えるようにtkウィンドウを移動する。指示に従って選択を行います。コンソール*をクリックし、returnキーを押すと入力文が返されます。繰り返す。私の結果は、両方の選択肢が、すべてではなく、青色に変わるということです。私は次の実験のためにbgの色の代わりにフォントを変更することをお勧めします。 Windowsでは
- Windowsは一度に1つのウィンドウで表示を選択できますので、1コンソールをクリックすると、TKウィンドウでハイライト表示の選択が消えます。しかし、選択マーカーはまだテキストウィジェットに存在しているので、tag_addは引き続き動作します。
ここでは、タグ範囲を1.0〜1.4にハードコーディングしています。問題は、 'sel.first'と 'sel.last'として定義された範囲であるようです。どういうわけか、最初のパスの後、2回目のパスから、この選択は実際に選択したテキストではありません。代わりにTextAreaのテキスト全体を考慮しています。 – SubhasisM
「何かになっているようだ」というのは、問題はしばしば問題ではないということです。だから私はあなたが最小限の変更実験をすることを提案しました。何が問題なのかを知るためです。私の提案をもう一度読んでください。私はハードコーディングされたインデックスを選択されたインデックスに変更する実験を行いました。後者はそれ自体では問題ではありません。次の実験(色ではなくフォントの変更)を続ける必要があります。 –