Python:tkinter无法同时显示多个image的解决方法,pack与place
0、问题
在用Tkinter进行编程时,需要在一个Frame下显示多个图片,但是不管怎么设置都是只显示最后一张,就像这样:
代码
for i in range(3): ... image=ImageTk.PhotoImage(f'img{i}.png')#分别打开img1,img2,img3并显示 Label(window, image=image, bg='green').place(x=60 + rw * i, y=500)
结果
本来红线处还有两幅图,总共三幅,但是现在只显示了最后一幅。
1、原因
在上述代码最后一行,我们这样写:
Label(window, image=image, bg='green').place(x=60 + rw * i, y=500)
在执行过程中,每个image变量会覆盖上一个image变量,导致运行过程中总是只有1个image参与了绘制,从而只显示一个image
2、解决
给不同的image分别命不同的名,或者干脆用一个List:
image=[] for i in range(3): ... image.append(ImageTk.PhotoImage(f'img{i}.png') Label(window,image=image[i],bg='green').place(x=60+rw*i,y=500)
补充
pack与place是没有返回值的,所以在需要对要素进行后续操作时,不要直接将该要素的生成和放置写在同一句话中,就像这样:
Label(window, text='直方图:', font=('宋体', 16)).place(x=0, y=60)
最好分开写:
L1=Label(window, text='直方图:', font=('宋体', 16)) L1.place(x=0, y=60)
如果像一开始那样写L1=XXX.place(),那么最终得到的L1将是NoneType
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
2021-01-07 资源管理模式:Evictor模式
2020-01-07 strtok:This function or variable may be unsafe.
2020-01-07 控制台一闪而过
2020-01-07 visual studio调试
2020-01-07 C++ 字符串 string