Tkinter点击生成按钮仅显示文本无法加载图片问题求助
问题原因
- 图片无法显示是Tkinter的图片对象垃圾回收机制导致:
show()函数内定义的img属于局部变量,函数执行结束后会被自动销毁,绑定该图片的Label就无法正常渲染内容。 - 原代码还存在
options变量未定义的问题,运行时会直接报错。
修复要点
- 给图片对象添加持久引用,比如将img绑定到展示图片的Label组件的属性上,避免被回收。
- 提前定义
options = ["A", "B"]配置下拉选项。 - 可选优化:提前创建好文本、图片展示组件,每次点击生成按钮仅更新组件内容,避免重复创建组件导致窗口内容堆积。
可运行修正代码
from tkinter import * from PIL import ImageTk, Image main_window = Tk() main_window.geometry('400x400') main_window.title("A OR B") # 提前定义下拉选项 options = ["A", "B"] # 提前创建展示组件,避免重复生成 text_label = Label(main_window) text_label.pack(pady=5) img_label = Label(main_window) img_label.pack(pady=5) def show(): select_val = clicked.get() if select_val == 'A': text_label.config(text='A SELECTED') img = ImageTk.PhotoImage(Image.open('l.png')) img_label.config(image=img) # 给图片对象添加持久引用,防止被垃圾回收 img_label.img = img elif select_val == 'B': text_label.config(text='B SELECTED') img = ImageTk.PhotoImage(Image.open('g.png')) img_label.config(image=img) img_label.img = img clicked = StringVar() clicked.set('SELECT A or B ') drop = OptionMenu(main_window, clicked, *options).pack(pady=10) Button(main_window, text='GENERATE',fg='white',bg='blue',command = show).pack(pady=5) main_window.mainloop()
内容的提问来源于stack exchange,提问作者Andrew Mathews
相关产品推荐
相关产品推荐

