为何修改tkinter图像引用列表元素会自动更新画布显示?
问题原因解析
这是tkinter的PhotoImage特性和Python垃圾回收机制共同导致的,说白了就是:
- 你用
canvas.create_image()把logos里的图像放到画布上时,画布的图像元素不会自己“抓牢”这个图像对象,它全靠logos列表里的元素给这个图像对象“续命”(也就是保持引用)。 - 当你把
logos里的某个元素换成imageblank时,原来的那个图像对象就没人引用它了——要是没其他变量存过它,Python就会把这个图像对象直接销毁。 - 图像对象被销毁后,画布上对应的位置没东西可显示,就变成空白了。
别误会,你看到的空白不是imageblank自动显示上去了,只是原来的图像没了。真要显示imageblank,得自己调用canvas.itemconfig(你要改的图像元素ID, image=imageblank)才行。
内容的提问来源于stack exchange,提问作者fatsifat
相关产品推荐
相关产品推荐

