如何让插入Tkinter Text组件中的图片支持点击事件?
Tkinter Text组件中实现可点击图片的解决方法
你遇到的问题根源是:image_create方法返回的并不是可用于tag_bind的有效标签名,它返回的是Tkinter内部用于标识图片的字符串,没法直接用来绑定事件。
解决步骤很简单,自己定义一个标签,给图片加上这个标签后再绑定事件:
- 自定义一个标签名称(比如
"clickable_img") - 插入图片时通过
tags参数把这个标签关联到图片上 - 针对这个自定义标签绑定点击事件
修改后的完整代码:
from tkinter import Tk, Text from PIL import Image, ImageTk def on_image_click(event): # 这里写图片点击后的逻辑 print("图片被点击啦!") root = Tk() txtbox = Text(root) txtbox.pack(padx=10, pady=10) path = "test.png" # 替换成你的图片路径 my_image = ImageTk.PhotoImage(file=path) # 插入图片并添加自定义标签 txtbox.image_create(txtbox.index('insert'), image=my_image, tags=("clickable_img",)) # 绑定自定义标签的左键点击事件 txtbox.tag_bind("clickable_img", "<Button-1>", on_image_click) # 关键:保留图片对象引用,防止被垃圾回收 txtbox.image_ref = my_image root.mainloop()
额外提醒:
- 一定要保留图片对象的引用(比如上面的
txtbox.image_ref = my_image),否则Python垃圾回收会把图片对象销毁,导致图片显示不出来 - 如果有多个图片需要绑定相同的点击事件,只需要给它们都加上同一个自定义标签即可,不用重复绑定
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

