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按钮不显示内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何从csv文件构建Tensorflow的数据集

    如何从csv文件构建Tensorflow的数据集

    这篇文章主要介绍了如何从csv文件构建Tensorflow的数据集,帮助大家更好的理解和使用Tensorflow,感兴趣的朋友可以了解下
    2020-09-09
  • 三分钟python搭建支付宝三方支付

    三分钟python搭建支付宝三方支付

    本文主要介绍了三分钟python搭建支付宝三方支付,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Python中canmatrix解析dbc文件应用常见示例

    Python中canmatrix解析dbc文件应用常见示例

    DBC是一种用于描述CAN网络协议的文件格式,Python作为一种流行的编程语言,也提供了解析DBC文件的相关类库,这篇文章主要给大家介绍了关于Python中canmatrix解析dbc文件的相关资料,需要的朋友可以参考下
    2024-08-08
  • pandas读取csv格式数据时header参数设置方法

    pandas读取csv格式数据时header参数设置方法

    本文主要介绍了pandas读取csv格式数据时header参数设置方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Python读取JSON文件及一些常见的陷阱和改进方法

    Python读取JSON文件及一些常见的陷阱和改进方法

    在Python编程中处理JSON文件是一项基本但关键的技能,文章通过一个简单的读取JSON文件的代码示例出发,分析了代码中存在的问题,将遇到的问题解决方法介绍也非常详细,需要的朋友可以参考下
    2024-10-10
  • Sublime Text 配置 Python 环境的问题及解决方案

    Sublime Text 配置 Python 环境的问题及解决方案

    这篇文章主要介绍了Sublime Text 配置 Python 环境的问题,文中介绍了python自定义的构建系统的完整代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • Python:pycharm中虚拟环境venv的使用及说明

    Python:pycharm中虚拟环境venv的使用及说明

    文章介绍了虚拟环境的必要性和实践方法,虚拟环境可以帮助用户管理不同项目所需的Python版本和第三方模块,避免版本冲突和模块冲突,文章详细介绍了如何使用Python自带的`venv`模块创建和管理虚拟环境,并通过命令行和PyCharm两种方式构建虚拟环境
    2025-01-01
  • Python使用中文正则表达式匹配指定中文字符串的方法示例

    Python使用中文正则表达式匹配指定中文字符串的方法示例

    这篇文章主要介绍了Python使用中文正则表达式匹配指定中文字符串的方法,结合实例形式分析了Python正则匹配及字符编码相关操作技巧,需要的朋友可以参考下
    2017-01-01
  • Python正则表达式分组

    Python正则表达式分组

    这篇文章主要介绍了Python正则表达式分组,命名分组,后向引用,前向否定断言、后向否定断言需要的朋友可以参考下
    2022-12-12
  • Python如何从列表中删除相邻和不相邻的相同元素

    Python如何从列表中删除相邻和不相邻的相同元素

    这篇文章主要介绍了Python如何从列表中删除相邻和不相邻的相同元素问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论