我目前正在编写一个配色方案编辑器。对于该方案的预览,我使用了一个文本小部件,在其中插入带有相应颜色标签(我通过编程生成)的文本。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特定的项目(例如弧和线)也是如此。很好的解决方法。 –