首先,我们知道在gui的实现中,所有的图像都是在被不断刷新的。
我也是在最近写到的一个程序中更加深刻地认识到了这一点。
我把遇到的问题做了简要的提取,在这里分享给大家!
…
…
请看下面两个程序:
from tkinter import *
root = Tk()
pp = PhotoImage(file = r"C:/Users/C-82/Desktop/meal/whatMeals3/graph/search.gif")
Button(root,image = pp).pack()
root.mainloop()
另外一个程序:
from tkinter import *
root = Tk()
def nn(root,pp):
pp = PhotoImage(file = r"C:/Users/C-82/Desktop/meal/whatMeals3/graph/search.gif")
Button(root,image = pp).pack()
Button(root,text="bb",command = lambda:nn(root,pp)).pack()
root.mainloop()
按照程序,当我们点击bb时,界面上应该产生一个新的button,并且这个button应该带有北京图片,但是却产生了以下的结果:
新的button是产生了,但是却没有背景!
。
。
。
。
原因是这样的:
所有的像素都在不断地进行更新,但是我们注意到,程序里面有一个却是与之异步的,那就是所有的事件函数,当我们点击相应的监听区域时,就会触发相应的函数,但是函数只执行一次。
知道了这一点,我们再来看这个例子,当我们点击bb这个button时,函数nn就会被执行,可是nn一瞬间就执行结束了,当函数返回时,nn创建的所有的局部变量就会被回收,所以刚刚创建的PhotoImage对象就没有了,当mainloop开启事件循环时,这个新的button上却找不到这个对象了,所以就没有了。
解决的办法就是:将pp创建在主函数内,并将其作为参数传到nn函数中!
认真写每一篇文章,认真分析每一个问题
如果觉得写的还可以,欢迎关注BBIT共同学习共同进步,谢谢!