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编程之变量赋值操作实例分析
Jul 24 Python
使用Kivy将python程序打包为apk文件
Jul 29 Python
Python入门之三角函数atan2()函数详解
Nov 08 Python
python如何为创建大量实例节省内存
Mar 20 Python
python按照多个条件排序的方法
Feb 08 Python
python函数参数(必须参数、可变参数、关键字参数)
Aug 16 Python
python global关键字的用法详解
Sep 05 Python
Python生成个性签名图片获取GUI过程解析
Dec 16 Python
Python datetime 格式化 明天,昨天实例
Mar 02 Python
学习Python列表的基础知识汇总
Mar 10 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
python爬虫今日热榜数据到txt文件的源码
Feb 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下连接mssql2005的代码
2011/01/17 PHP
解析csv数据导入mysql的方法
2013/07/01 PHP
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
php实现TCP端口检测的方法
2015/04/01 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
在laravel框架中实现封装公共方法全局调用
2019/10/14 PHP
情人节之礼 js项链效果
2012/02/13 Javascript
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
2020/07/09 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
Python中使用logging模块打印log日志详解
2015/04/05 Python
python实现清屏的方法
2015/04/30 Python
Python面向对象之静态属性、类方法与静态方法分析
2018/08/24 Python
python学生信息管理系统(初级版)
2018/10/17 Python
在Python中增加和插入元素的示例
2018/11/01 Python
对python:print打印时加u的含义详解
2018/12/15 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
学习十八届三中全会精神实施方案
2014/02/17 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
Selenium浏览器自动化如何上传文件
2022/04/06 Python