Tkinter点击下一步替换按钮出现空白区域问题求助
问题成因
该问题属于Tkinter的经典图片引用丢失问题:advance()函数内部定义的img1 = PhotoImage(...)是局部变量,函数执行完毕后,该变量会被Python垃圾回收机制自动销毁。Tkinter的Button部件本身不会额外持有图片对象的强引用,图片被回收后按钮失去显示内容,最终呈现为空白区域。(按钮b1本身因为调用了place()方法,会被窗口持有引用不会被回收,问题完全来自图片引用丢失)
可行解决方案
- 方案1:将图片变量提升为全局变量。在函数外部提前声明
img1 = None,函数内部使用global img1修饰后再对img1赋值,避免函数执行完成后变量被回收。 - 方案2:将图片绑定为按钮的实例属性。在创建
b1后添加一行代码b1.img = img1,因为按钮部件本身会被窗口持有不会被回收,绑定到它属性上的图片也会被保留。 - 方案3:在全局作用域维护一个专门的图片缓存容器(列表或字典),把所有用到的
PhotoImage对象都存入该容器中,只要容器没有被销毁,内部存储的图片就不会被回收。
内容的提问来源于stack exchange,提问作者bruce_wayne224
相关产品推荐
相关产品推荐

