python GUI入坑第一步button上的image
首先,我们知道在gui的实现中,所有的图像都是在被不断刷新的。
我也是在最近写到的一个程序中更加深刻地认识到了这一点。
我把遇到的问题做了简要的提取,在这里分享给大家!
成功的例子
请看下面两个程序:
1 | from tkinter import * |
实验成功!
失败的例子
另外一个程序:
1 | from tkinter import * |
按照程序,当我们点击bb时,界面上应该产生一个新的button,并且这个button应该带有北京图片,但是却产生了以下的结果: 新的button是产生了,但是却没有背景!
原因分析
原因是这样的: 所有的像素都在不断地进行更新,但是我们注意到,程序里面有一个却是与之异步的,那就是所有的事件函数,当我们点击相应的监听区域时,就会触发相应的函数,但是函数只执行一次。
知道了这一点,我们再来看这个例子,当我们点击bb这个button时,函数nn就会被执行,可是nn一瞬间就执行结束了,当函数返回时,nn创建的所有的局部变量就会被回收,所以刚刚创建的PhotoImage对象就没有了,当mainloop开启事件循环时,这个新的button上却找不到这个对象了,所以就没有了。 解决的办法就是:将pp创建在主函数内,并将其作为参数传到nn函数中!