私は現在配色エディタを書いています。スキームのプレビューには、テキスト ウィジェットを使用して、対応するカラー タグ (プログラムで生成したもの) を含むテキストを挿入します。
私が欲しいのは、次の動作です。
- テキスト ウィジェットのテキストがない場所をクリックします: 背景色を変更します
- タグで挿入されたテキストをクリック: 前景色に対応するタグを変更
ここに私の問題があります:
タグ付きテキストをクリックすると、タグのコールバックが呼び出されます。ここまでは順調ですね。しかし、その後、テキスト ウィジェットのコールバックも呼び出されますが、タグのコールバック メソッドで「break」を返します (これにより、それ以上のイベント処理を停止する必要があります)。どうすればこれを止めることができますか?
この特定の問題を説明するために、次の作業例を作成しました (Python 2 & 3 用):
#!/usr/bin/env python
try:
from Tkinter import *
from tkMessageBox import showinfo
except ImportError:
from tkinter import *
from tkinter.messagebox import showinfo
def on_click(event, widget_origin='?'):
showinfo('Click', '"{}"" clicked'.format(widget_origin))
return 'break'
root = Tk()
text = Text(root)
text.pack()
text.insert(CURRENT, 'Some untagged text...\n')
text.bind('<Button-1>', lambda e, w='textwidget': on_click(e, w))
for i in range(5):
tag_name = 'tag_{}'.format(i)
text.tag_config(tag_name)
text.tag_bind(tag_name, '<Button-1>',
lambda e, w=tag_name: on_click(e, w))
text.insert(CURRENT, tag_name + ' ', tag_name)
root.mainloop()
どんな助けでも大歓迎です!
編集:Python 2も試しました。