IDLE中使用CustomTkinter在CTk按钮显示图片失败求助
问题情况
在使用CustomTkinter(ctk)的按钮组件时,始终无法成功加载图片。
出错代码片段
img = ctk.CTkImage(Image.open("C:/Documents/a/cloud.png"))
按钮调用代码
label_weather = ctk.CTkButton(tabView.tab("Map"), text ="Currently cloudy", image=img, compound="left", command=label_weather) label_weather.pack(padx=20, pady=20)
已尝试的路径写法
代码已和图片放在同一目录下,试过以下路径均无效:
img = ctk.CTkImage(Image.open("C:/a/cloud.png")) img = ctk.CTkImage(Image.open("Documents/a/cloud.png")) img = ctk.CTkImage(Image.open("a/cloud.png")) img = ctk.CTkImage(Image.open("C:/a/cloud.png"))
目录结构说明
代码文件与名为a的文件夹同级,cloud.png存放在a文件夹内。
解决步骤
用绝对路径拼接避免路径错误
直接通过脚本路径拼接图片绝对路径,彻底解决相对路径的不确定性:import os from PIL import Image import customtkinter as ctk # 获取当前脚本所在的绝对目录 current_script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接图片的完整路径 image_full_path = os.path.join(current_script_dir, "a", "cloud.png") # 加载图片并创建CTkImage对象 img = ctk.CTkImage(Image.open(image_full_path), size=(30, 30)) # 可根据需求调整size检查文件本身
- 确认
cloud.png文件没有损坏,能正常打开 - 核对文件名大小写(Windows不区分,但Linux/macOS下大小写敏感),确保后缀是
.png而非其他格式
- 确认
修正按钮的command参数错误
原代码中command=label_weather会报错,因为此时label_weather还未定义。替换成实际的函数名,或用lambda临时绑定:# 示例:用lambda绑定(如果不需要传参) label_weather = ctk.CTkButton(tabView.tab("Map"), text ="Currently cloudy", image=img, compound="left", command=lambda: print("按钮被点击"))
内容的提问来源于stack exchange,提问作者Zip Zap
相关产品推荐
相关产品推荐

