python - Tkinter 多个标签的动态事件绑定(bind)

标签 python tkinter

尝试将事件绑定(bind)到 tkinter 中的多个文本标记。基本上,用户输入文本,文本会在文本输入中重新写入,每个单词都作为标签,这样当用户单击某个单词时,就会拾取该单词。

def check_input():
   user_input = text.get('1.0', END)
   text.delete("1.0",END)
   u = user_input.split()  
   tags = []
   for i,j in enumerate(u):
       tags.append('tag'+str(i))
       text.tag_config("tag"+str(i), foreground="blue")
       text.insert(END, j+" ", "tag"+str(i))


   for t in tags:
       text.tag_bind(t, "<Button-1>", lambda e:click(e, t))

循环遍历所有标签并尝试绑定(bind)点击事件不起作用,它只绑定(bind)到最后一个标签。如何动态地将事件绑定(bind)到多个标签?

最佳答案

您在绑定(bind)标签时调用callback(e, t)

相反,您应该使用 lambda 函数来传递正确的参数并将它们绑定(bind)到每个标签:

lambda event, t=t: callback(event, t)

关于python - Tkinter 多个标签的动态事件绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56829200/

相关文章:

python - 使用 Python 2.7 的 Google App Engine - CouldNotFindModuleError

python - 为什么未捕获的异常会被记录到 Sentry 两次?

python - 获取按索引定向的嵌套字典中的键和值列表

python - 在 python 和 tkinter 中检测碰撞

python - 将秒转换为分秒

python - 使用 Pmw 时为 "ImportError: No module named tkinter"

python - 接受用户输入来加载程序

python - 为什么我要使用 `async def` 而不是 `@asyncio.coroutine`?

python - 给定一个数组,找到满足以下等式的四个唯一整数

python - 如何将文本小部件内容设置为 Python/Tkinter 中的变量值?