You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 03:36:02