如何在Python Tkinter中获取Label绑定的图片变量名?
获取Tkinter Label绑定的图片变量名
直接通过label1.cget('image')只能得到图片对象的内部标识字符串(比如pyimage1),无法直接获取定义时的变量名(如my_img)。这是因为变量名是代码层面的标识符,运行时的图片对象本身不会记录它被赋值给哪个变量。
要实现需求,你可以手动建立一个图片对象到变量名字符串的映射字典,具体步骤如下:
- 定义图片变量后,创建一个字典,将每个图片对象和对应的变量名关联起来
- 当需要获取Label绑定的图片变量名时,先获取Label的image对象,再在字典中查找对应的变量名
修改后的示例代码:
import tkinter as tk from PIL import ImageTk, Image root = tk.Tk() # 定义图片变量 my_img = ImageTk.PhotoImage(Image.open("./Images/img.jpg")) my_img1 = ImageTk.PhotoImage(Image.open("./Images/img1.jpg")) my_img2 = ImageTk.PhotoImage(Image.open("./Images/img2.jpg")) # 创建图片对象到变量名的映射字典 image_to_name = { my_img: "my_img", my_img1: "my_img1", my_img2: "my_img2" } image_list = [my_img, my_img1, my_img2] label1 = tk.Label(root, image=image_list[0]) # 获取Label当前绑定的图片对象,再查字典得到变量名 current_image_id = label1.cget('image') # 将标识字符串转为实际图片对象 current_image_obj = root.nametowidget(current_image_id) variable_name = image_to_name.get(current_image_obj, "未知图片") print(variable_name) # 输出:my_img
关键说明
root.nametowidget(current_image_id):把cget('image')返回的标识字符串转换成实际的图片对象,这样才能在映射字典中匹配- 映射字典需要和图片变量一一对应,确保每个图片对象都有对应的变量名字符串
- 如果后续有动态添加/更换图片的操作,记得同步更新这个映射字典
内容的提问来源于stack exchange,提问作者Leon Jiang
相关产品推荐
相关产品推荐

