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通过select实现异步IO的方法
Jun 04 Python
详解Python的Django框架中inclusion_tag的使用
Jul 21 Python
python实现多线程的方式及多条命令并发执行
Jun 07 Python
python求最大连续子数组的和
Jul 07 Python
Python3多线程基础知识点
Feb 19 Python
python之生产者消费者模型实现详解
Jul 27 Python
利用python实现冒泡排序算法实例代码
Dec 01 Python
Python字典底层实现原理详解
Dec 18 Python
Python 日期的转换及计算的具体使用详解
Jan 16 Python
PyQt5多线程防卡死和多窗口用法的实现
Sep 15 Python
Python scrapy爬取起点中文网小说榜单
Jun 13 Python
python装饰器代码解析
Mar 23 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
php文件上传表单摘自drupal的代码
2011/02/15 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
javascript闭包入门示例
2014/04/30 Javascript
js实现点击获取验证码倒计时效果
2021/01/28 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
微信小程序 数据绑定及运算的简单实例
2017/09/20 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
2018/08/06 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
python线程、进程和协程详解
2016/07/19 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
Python实现识别图片内容的方法分析
2018/07/11 Python
python爬取哈尔滨天气信息
2018/07/14 Python
Flask框架WTForm表单用法示例
2018/07/20 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
Django接收自定义http header过程详解
2019/08/23 Python
Python实现的北京积分落户数据分析示例
2020/03/27 Python
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
德国大型箱包和皮具商店:Koffer
2019/10/01 全球购物
聘任书的写作格式及范文
2014/03/29 职场文书
网站美工岗位职责
2014/04/02 职场文书
家长对孩子的评语
2014/04/18 职场文书
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
拆迁委托协议书
2014/09/15 职场文书
公司放假通知怎么写
2015/04/15 职场文书
学校运动会感想
2015/08/10 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS
vue实现在data里引入相对路径
2022/06/05 Vue.js