Tkinter中Label与Canvas控件无法显示Image图片问题求助
问题原因
- 自定义
FrameBanner组件是tk.Frame的子类,完成实例化后,你没有调用pack()/grid()/place()方法将其挂载到父容器self.frm_banner上,导致整个FrameBanner组件本身就没有渲染,内部的图片自然无法显示。 - 额外可能的诱因:图片路径
images_2/logo_here.png相对程序运行目录不正确,也会导致图片加载失败显示为空。你当前给Label绑定image属性保留图片引用的逻辑是正确的,不存在图片被垃圾回收的问题。
解决建议
- 在
FrameBanner实例化代码后补充布局调用,根据你的布局需求选择合适的方法即可,示例如下:
## Banner self.frm_banner_height = height*0.2 self.frm_banner = tk.Frame(master=self.frm_pregen, width=self.frm_pregen_width, height=self.frm_banner_height) self.FrameBanner = FrameBanner(self.frm_banner, color_black, color_yellow, self.frm_pregen_width, self.frm_banner_height) # 新增布局代码,也可根据你的布局规则改用grid方法 self.FrameBanner.pack(fill=tk.BOTH, expand=True)
- 校验图片路径正确性,可在加载图片前增加路径存在性判断:
import os print(os.path.exists("images_2/logo_here.png"))
输出为True才代表路径配置正确。
- 如果你后续要恢复使用Canvas版本的代码,注意你注释的代码里
self.banner_2.image = self.image_IMS写错了变量名,要改成self.image_2才能正常生效。
内容的提问来源于stack exchange,提问作者Samuel Owen
相关产品推荐
相关产品推荐

