Python3.8 + Tkinter: Button设置image属性不显示的问题及解决方法

 更新时间:2021年08月09日 10:14:59   作者:98237982379  
这篇文章主要介绍了Python3.8 + Tkinter: Button设置image属性不显示的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

        Bug如题目所描述。尝试过将按钮的image指向的变量del_icon设置为global全局变量,但是不成功,会提示如“

AttributeError: 'PhotoImage' object has no attribute '_PhotoImage__photo'

”的错误。代码1是导致bug的源头。

        代码1:

#!/bin/env python3
from PIL import ImageTk
import tkinter as tk
...
self.del_button = tk.Button(self.frame, text='DEL', width=20, height=20)
self.del_button.config(image=ImageTk.PhotoImage(resize(os.getcwd() + '/delete.png', 0)))
self.del_button.bind('<Button-1>', self.delete_selected_image)
self.del_button.grid(row=0, column=0, sticky=tk.W)

        结果删除按钮不显示image,按钮上显示空白:

del_button的image不显示
del_button的image不显示

        尝试将del_button的image指向的变量设置为局部变量,即下面所展示的代码2。

        代码2:

#!/bin/env python3
from PIL import ImageTk
import tkinter as tk
...
self.del_button = tk.Button(self.frame, text='DEL', width=20, height=20)
del_icon = ImageTk.PhotoImage(resize(os.getcwd()+'/delete.png', 0))
self.del_button.config(image=del_icon)
self.del_button.bind('<Button-1>', self.delete_selected_image)
self.del_button.grid(row=0, column=0, sticky=tk.W)

        结果删除按钮的image显示正常:

button的image显示正常
del_button的image显示正常

         笔记:

                不明所以的bug。判断潜在原因是:GC的问题。image属性需要指向明确的内存地址。方法返回的临时变量地址调用后即被回收,导致image指向空地址。


        resize()的代码:

#!/bin/env python3
from PIL import Image
 
def resize(path):
    image = Image.open(path)
    raw_width, raw_height = image.size[0], image.size[1]
    min_height = 20
    min_width = int(raw_width * min_height / raw_height)
    return image.resize((min_width, min_height))

到此这篇关于Python3.8 + Tkinter: Button设置image属性不显示的问题的文章就介绍到这了,更多相关Python Tkinter按钮不显示内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python数据合并的concat函数与merge函数详解

    Python数据合并的concat函数与merge函数详解

    大家都知道concat()函数可以沿着一条轴将多个对象进行堆叠,其使用方式类似数据库中的数据表合并,在使用merge()函数进行合并时,默认会使用重叠的列索引做为合并键,即取行索引重叠的部分,本文给大家介绍python 数据合并concat函数与merge函数,感兴趣的朋友一起看看吧
    2022-05-05
  • Python发送邮件功能示例【使用QQ邮箱】

    Python发送邮件功能示例【使用QQ邮箱】

    这篇文章主要介绍了Python发送邮件功能,结合实例形式分析了Python使用QQ邮箱进行邮件发送的相关设置与使用技巧,需要的朋友可以参考下
    2018-12-12
  • Python使用requirements.txt和pip打包批量安装的实现

    Python使用requirements.txt和pip打包批量安装的实现

    本文主要介绍了Python使用requirements.txt和pip打包批量安装的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 用Pytorch实现线性回归模型的步骤

    用Pytorch实现线性回归模型的步骤

    线性关系是一种非常简单的变量之间的关系,因变量和自变量在线性关系的情况下,可以使用线性回归算法对一个或多个因变量和自变量间的线性关系进行建模,本文主要介绍了如何利用Pytorch实现线性模型,需要的朋友可以参考下
    2024-01-01
  • 解决df.to_csv()中文件名的问题

    解决df.to_csv()中文件名的问题

    这篇文章主要介绍了解决df.to_csv()中文件名的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python 实现将大图切片成小图,将小图组合成大图的例子

    Python 实现将大图切片成小图,将小图组合成大图的例子

    这篇文章主要介绍了Python 实现将大图切片成小图,将小图组合成大图的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • python模拟菜刀反弹shell绕过限制【推荐】

    python模拟菜刀反弹shell绕过限制【推荐】

    这篇文章主要介绍了利用python模拟菜刀反弹shell绕过限制,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • Python远程开发环境部署与调试过程图解

    Python远程开发环境部署与调试过程图解

    这篇文章主要介绍了Python远程开发环境部署与调试过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 深入理解python中的浅拷贝和深拷贝

    深入理解python中的浅拷贝和深拷贝

    下面小编就为大家带来一篇深入理解python中的浅拷贝和深拷贝。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 基于Python实现文件分类器的示例代码

    基于Python实现文件分类器的示例代码

    这篇文章主要为大家详细介绍了如何基于Python实现文件分类器,目的主要是为了将办公过程中产生的各种格式的文件完成整理,感兴趣的可以了解一下
    2023-04-04

最新评论