Tkinter图文按钮图片不显示问题求助及宽高参数疑问
问题解答
1. 图片无法显示的原因及解决
图片不显示核心原因是Tkinter的PhotoImage对象被Python垃圾回收机制清理了——balance_img作为临时变量,没有被持续引用,Tkinter无法维持图片资源。另外也需要确认图片路径是否正确。
解决步骤:
- 给按钮绑定一个属性保存图片引用,避免被回收:
balance_btn.image = balance_img # 新增这行,保留图片引用 - 确认
img/balance.png路径正确,比如img文件夹和脚本在同一目录,或用绝对路径测试。 - 你的代码最后一行
balance_btn.grid(...)少了闭合括号,补上:balance_btn.grid(row = 0, column = 0, sticky = tk.W, padx = 10, pady = (60,40))
2. 按钮尺寸变化的原因
和.grid布局无关,是Tkinter按钮的width/height参数规则导致的:
- 按钮无图片时,
width和height指的是字符数和行数(比如width=22是22个默认字符的宽度,height=2是2行文字的高度)。 - 按钮包含图片时,
width和height自动切换为像素单位,所以数值需要设大才能容纳图片+文字。如果不想手动设尺寸,可以去掉width和height参数,让按钮自适应图片和文字的大小。
修正后的完整代码示例:
bl_logo = Image.open('img/balance.png') bl_logo = bl_logo.resize((25,25), Image.ANTIALIAS) balance_img = ImageTk.PhotoImage(bl_logo) buttons_frame = tk.Frame(main_frame, bg = "#004d4d") balance_btn = tk.Button(buttons_frame, image = balance_img, compound = tk.LEFT, text = 'BALANCE', font = ('Bebas NEUE', 20)) balance_btn.image = balance_img # 保留图片引用 balance_btn.grid(row = 0, column = 0, sticky = tk.W, padx = 10, pady = (60,40))
内容的提问来源于stack exchange,提问作者C Marian
相关产品推荐
相关产品推荐

