python 实现在tkinter中动态显示label图片的方法


Posted in Python onJune 13, 2019

在编程中我们往往会希望能够实现这样的操作:点击Button,选择了图片,然后在窗口中的Label处显示选到的图片。那么这时候就需要如下代码:

from tkinter import *
from tkinter.filedialog import askopenfilename
 
def choosepic():
  path_=askopenfilename()
  path.set(path_)
  img_gif=Tkinter.PhotoImage(file='xxx.gif')
  l1.config(image=img_gif)
  
root=Tk()
path=StringVar()
Button(root,text='选择图片',command=choosepic).pack()
e1=Entry(root,state='readonly',text=path)
e1.pack()
l1=Label(root)
l1.pack()
root.mainloop

而由于tkinter只能识别gif格式的图片,如果我们要添加jpg或者png格式的图片的话就要借用PIL进行处理。这时候代码如下:

from tkinter import *
from tkinter.filedialog import askopenfilename
from PIL import Image,ImageTk
 
def choosepic():
  path_=askopenfilename()
  path.set(path_)
  img_open = Image.open(e1.get())
  img=ImageTk.PhotoImage(img_open)
  l1.config(image=img)

但这个时候会发现Label并没有如我们所期望的那样变化。

这时候我去网上查找了相关资料,在 https://stackoverflow.com/questions/14291434/how-to-update-image-in-tkinter-label 下看到了回答者给出的解决办法:

photo = ImageTk.PhotoImage(self.img)
self.label1.configure(image = photo)
self.label1.image = photo # keep a reference!

于是在他的启发下我将代码进行了修改,之后完美解决了问题。修改后函数部分的代码如下:

def choosepic():
  path_=askopenfilename()
  path.set(path_)
  img_open = Image.open(e1.get())
  img=ImageTk.PhotoImage(img_open)
  l1.config(image=img)
  l1.image=img #keep a reference

而由于本人才疏学浅,对于造成这种现象的原因尚不理解。不过那名外国回答者也给出了这样修改的原因,在 http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm 上对于为何要keep a reference做出了详尽的解释。

原文如下:

python 实现在tkinter中动态显示label图片的方法

以上这篇python 实现在tkinter中动态显示label图片的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
一篇文章入门Python生态系统(Python新手入门指导)
Dec 11 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
Jul 12 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
Aug 07 Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 Python
python中时间模块的基本使用教程
May 14 Python
OpenCV模板匹配matchTemplate的实现
Oct 18 Python
Python partial函数原理及用法解析
Dec 11 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
Mar 01 Python
详细总结Python常见的安全问题
May 21 Python
windows10下安装TensorFlow Object Detection API的步骤
Jun 13 #Python
24式加速你的Python(小结)
Jun 13 #Python
Python button选取本地图片并显示的实例
Jun 13 #Python
对Python强大的可变参数传递机制详解
Jun 13 #Python
python 通过可变参数计算n个数的乘积方法
Jun 13 #Python
python 多线程对post请求服务器测试并发的方法
Jun 13 #Python
Python任意字符串转16, 32, 64进制的方法
Jun 12 #Python
You might like
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
由Javascript实现的页面日历
2011/11/04 Javascript
JQuery1.6 使用方法三
2011/11/23 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
Python程序设计入门(5)类的使用简介
2014/06/16 Python
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
Python字典操作简明总结
2015/04/13 Python
python中lambda与def用法对比实例分析
2015/04/30 Python
python中黄金分割法实现方法
2015/05/06 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
毕业生大学生活自我总结
2014/01/31 职场文书
美国留学经济担保书
2014/05/20 职场文书
物流管理专业推荐信
2014/09/06 职场文书
关于运动会的广播稿
2014/09/22 职场文书
幼儿园个人总结
2015/02/28 职场文书
2015年药房工作总结
2015/04/25 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
vue选项卡切换的实现案例
2022/04/11 Vue.js
python 闭包函数详细介绍
2022/04/19 Python