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指向的变量设置为局部变量,即下面所展示的代码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显示正常:

del_button的image显示正常

笔记:

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


resize()的代码:

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

Python3.8 + Tkinter: Button设置image属性不显示的问题相关推荐

  1. button设置disabled属性不生效_jQuery属性节点

    发现了很好玩的表情可以插入嘻嘻嘻嘻嘻嘻嘻 1.attr属性操作 在jQuery中,可以通过attr()方法操作属性,可以是固有属性,也可以是自定义属性. 1.1 设置属性值 // 设置单个属性 $(& ...

  2. vs C# 怎么设置窗口属性? 显示没有边框新窗口

    大家在打开VS2019,PS这种 会先有一个图,上面显示一张图片VS2019和PS logo啥的,没有边框的,这个如何实现? 怎么设置窗口属性? using System; using System. ...

  3. python3中tkinter button属性_Python3 tkinter基础 Button bg 按钮的背景颜色

    标签: python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 conda : 4.5.11 type setting : Mark ...

  4. Python tkinter Button 属性和方法介绍

    Python Tkinter Button 属性和方法介绍 1. Button 1.1标准属性 1.2 专有属性 1.3方法 2. Button属性和方法说明程序 2.1 窗口代码 2.2 属性和方法 ...

  5. python tkinter 各控件属性 全

    2019独角兽企业重金招聘Python工程师标准>>> 1.Button 按钮.类似标签,但提供额外的功能,例如鼠标掠过.按下.释放以及键盘操作/事件 2.Canvas 画布.提供绘 ...

  6. tkinter button 一个按钮第二次回复_python-tkinter使用方法

    Button控件 #!/usr/bin/env python # -*- coding:utf-8 -*-import tkinterdef func():print("aaaaaaaaaa ...

  7. [WPF Bug清单]之(6)——Button的IsCancel属性失效

    在上一篇中,描述了模态对话框隐藏之后变成了非模态的Bug,很多人回复表示这不算是一个Bug,我也表示理解.Bug只有在需求之下才有意义,不同的需求,对Bug的界定也不一样.作为一个Framework, ...

  8. js,jq设置获取属性,样式

    js设置获取属性:设置属性-element.setAttribute("属性名称","属性值"):获取属性-element.getAttribute(" ...

  9. Python3使用tkinter编写GUI程序

    目录 @(Python3中tkinter写的HTTP测试工具代码支持正则表达式和XPATH) 程序非常简单,暂时只支持GET方法,使用内置库tkinter编写GUI窗口,在Mac下运行效果图如下,wi ...

最新文章

  1. 网易开源支持图像识别的自动化UI测试工具,零基础亲测好评!
  2. fedora java 开发环境_Linux(Fedora 14)下 java开发环境配置 ——jdk的安装与配置
  3. AI大师张钹领衔,清华AI研究院推出知识计算开放平台
  4. 同步手绘板——将View的内容映射成Bitmap转图片导出
  5. 为什么python不出结果_Python 的 Checksum 为什么结果是一长串数字而不是如下效果...
  6. LinkedList 模拟栈和队列
  7. java环境安装包出现覆盖,请查收
  8. C Primer+Plus(十七)高级数据表示 编程练习(二)
  9. java字符函数_java字符串函数用法汇总
  10. [LeetCode] Longest Consecutive Sequence 求解
  11. zabbix的trigger
  12. 怎么用计算机弹histheme,来至世界最好的器乐演奏大合集可做音乐素材-Various Artists 2015  (20CD)FLAC/MP...
  13. PC搭建抓包WIFI
  14. ML-Agents命令及配置大全
  15. 5G NR标准: 第18章 射频特性
  16. 给力文:网络营销就像娶美女做老婆(转)
  17. 教你使用谷歌浏览器自带的翻译功能,阅读网站的神器
  18. Minecraft 1.16.5模组开发(三十) 自定义成就系统(advancements)
  19. Google Chrome,是由Google开发的,一款设计非常简单、十分高效的Web浏览工具!
  20. 嘿嘿,插播消息,最新一期的流言终结者

热门文章

  1. PS将照片做成宣纸古典效果
  2. phpstorm优雅的格式化php代码
  3. MySQL配置远程连接
  4. css垂直居中超出后并出现滚动条的解决方案
  5. 【休闲益智】【HTML】抓船长,30s抓船长,看能抓几只
  6. FPGA中的ODDR原语是干嘛用的?
  7. PDF转化成Word网站推荐
  8. 摸金校尉聊浏览器渲染
  9. 文远知行杯广东工业大学第十六届程序设计竞赛
  10. 手把手教你!0基础小白也可以使用谷歌服务器搭建自己的博客网站