好吧,在 稍微 修改一下之后,我能够找到一个可行的解决方案。我认为问题在于标签可能没有从baseWidget继承。
我的解决方法:
- 对标签进行单独的回调;在此处设置一个变量,以跟踪单击了哪个标签
- 让文本小部件的事件处理程序根据此变量的内容决定要做什么
代码中的解决方法(很抱歉在
global这里使用,但是我只是修改了我的问题的简单示例…):
#!/usr/bin/env pythontry: from Tkinter import * from tkMessageBox import showinfoexcept importError: from tkinter import * from tkinter.messagebox import showinfotag_to_handle = ''def on_click(event, widget_origin='?'): global tag_to_handle if tag_to_handle: showinfo('Click', '"{}" clicked'.format(tag_to_handle)) tag_to_handle = '' else: showinfo('Click', '"{} " clicked'.format(widget_origin))def on_tag_click(event, tag): global tag_to_handle tag_to_handle = tagroot = 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_tag_click(e, w)) text.insert(CURRENT, tag_name + ' ', tag_name)root.mainloop()我希望这对遇到相同问题的人有所帮助。
我仍然愿意接受更好的解决方案!



