私は現在、カラースキームエディタを作成中です。スキームのプレビューでは、テキストウィジェットを使用します。テキストウィジェットでは、対応するカラータグ(プログラムで生成)をテキストに挿入します。私が欲しいものPython tkinter:テキストウィジェットのイベントの伝播を停止するタグ
は、次の動作です:テキストがありませんどこにでもテキストウィジェット上
- クリック:変更の背景色
- タグに挿入されたテキストをクリック:前景色を対応する変更タグ
は今ここに私の問題だ:
私がタグ付けされたテキストをクリックすると、タグのコールバックが呼び出されます。ここまでは順調ですね。しかし、テキスト・ウィジェットのコールバックも呼び出されますが、タグ・コールバック・メソッド(これはさらにイベント処理を停止する必要があります)で「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()
すべてのヘルプは歓迎です!
編集:Tried Python 2も同様です。
タグはテキスト固有のアイテムであり、タグクラスはありません。それらは間違いなくBaseWidgetからサブクラス化されていません。たとえば、円弧や線などのキャンバス固有のアイテムについては、同様です。ニースの回避策。 –