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指向的变量设置为局部变量,即下面所展示的代码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显示正常:
笔记:
不明所以的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属性不显示的问题相关推荐
- button设置disabled属性不生效_jQuery属性节点
发现了很好玩的表情可以插入嘻嘻嘻嘻嘻嘻嘻 1.attr属性操作 在jQuery中,可以通过attr()方法操作属性,可以是固有属性,也可以是自定义属性. 1.1 设置属性值 // 设置单个属性 $(& ...
- vs C# 怎么设置窗口属性? 显示没有边框新窗口
大家在打开VS2019,PS这种 会先有一个图,上面显示一张图片VS2019和PS logo啥的,没有边框的,这个如何实现? 怎么设置窗口属性? using System; using System. ...
- 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 ...
- Python tkinter Button 属性和方法介绍
Python Tkinter Button 属性和方法介绍 1. Button 1.1标准属性 1.2 专有属性 1.3方法 2. Button属性和方法说明程序 2.1 窗口代码 2.2 属性和方法 ...
- python tkinter 各控件属性 全
2019独角兽企业重金招聘Python工程师标准>>> 1.Button 按钮.类似标签,但提供额外的功能,例如鼠标掠过.按下.释放以及键盘操作/事件 2.Canvas 画布.提供绘 ...
- tkinter button 一个按钮第二次回复_python-tkinter使用方法
Button控件 #!/usr/bin/env python # -*- coding:utf-8 -*-import tkinterdef func():print("aaaaaaaaaa ...
- [WPF Bug清单]之(6)——Button的IsCancel属性失效
在上一篇中,描述了模态对话框隐藏之后变成了非模态的Bug,很多人回复表示这不算是一个Bug,我也表示理解.Bug只有在需求之下才有意义,不同的需求,对Bug的界定也不一样.作为一个Framework, ...
- js,jq设置获取属性,样式
js设置获取属性:设置属性-element.setAttribute("属性名称","属性值"):获取属性-element.getAttribute(" ...
- Python3使用tkinter编写GUI程序
目录 @(Python3中tkinter写的HTTP测试工具代码支持正则表达式和XPATH) 程序非常简单,暂时只支持GET方法,使用内置库tkinter编写GUI窗口,在Mac下运行效果图如下,wi ...
最新文章
- 网易开源支持图像识别的自动化UI测试工具,零基础亲测好评!
- fedora java 开发环境_Linux(Fedora 14)下 java开发环境配置 ——jdk的安装与配置
- AI大师张钹领衔,清华AI研究院推出知识计算开放平台
- 同步手绘板——将View的内容映射成Bitmap转图片导出
- 为什么python不出结果_Python 的 Checksum 为什么结果是一长串数字而不是如下效果...
- LinkedList 模拟栈和队列
- java环境安装包出现覆盖,请查收
- C Primer+Plus(十七)高级数据表示 编程练习(二)
- java字符函数_java字符串函数用法汇总
- [LeetCode] Longest Consecutive Sequence 求解
- zabbix的trigger
- 怎么用计算机弹histheme,来至世界最好的器乐演奏大合集可做音乐素材-Various Artists 2015 (20CD)FLAC/MP...
- PC搭建抓包WIFI
- ML-Agents命令及配置大全
- 5G NR标准: 第18章 射频特性
- 给力文:网络营销就像娶美女做老婆(转)
- 教你使用谷歌浏览器自带的翻译功能,阅读网站的神器
- Minecraft 1.16.5模组开发(三十) 自定义成就系统(advancements)
- Google Chrome,是由Google开发的,一款设计非常简单、十分高效的Web浏览工具!
- 嘿嘿,插播消息,最新一期的流言终结者