我目前正在編寫一個配色方案編輯器。對於該方案的預覽,我使用了一個文本小部件,在其中插入帶有相應顏色標籤(我通過編程生成)的文本。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()
任何幫助表示讚賞!
編輯:也嘗試過Python 2。
標籤是特定於文本的項目,並且沒有標籤類別。它們絕對不是BaseWidget的子類。例如,對於Canvas特定的項目(例如弧和線)也是如此。很好的解決方法。 –