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的Django框架中的数据过滤功能
Jul 17 Python
Python中的sort()方法使用基础教程
Jan 08 Python
在centos7中分布式部署pyspider
May 03 Python
python使用Apriori算法进行关联性解析
Dec 21 Python
Python实现的求解最大公约数算法示例
May 03 Python
python实现图片文件批量重命名
Mar 23 Python
selenium+python自动化测试之鼠标和键盘事件
Jan 23 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
Python中用pyinstaller打包时的图标问题及解决方法
Feb 17 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 Python
Django中的模型类设计及展示示例详解
May 29 Python
Python lambda表达式原理及用法解析
Aug 18 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实现事件机制实例分析
2015/06/26 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
javascript multibox 全选
2009/03/22 Javascript
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
jQuery EasyUI常用数据验证汇总
2016/09/18 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
2016/10/24 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
JavaScript判断浏览器版本的方法
2019/11/03 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
微信小程序实现底部弹出框
2020/11/18 Javascript
用python读写excel的方法
2014/11/18 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
对json字符串与python字符串的不同之处详解
2018/12/19 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
canvas实现扭蛋机动画效果的示例代码
2018/10/17 HTML / CSS
期末考试动员演讲稿
2014/01/10 职场文书
保护动物倡议书
2014/04/15 职场文书
快餐公司创业计划书
2014/04/29 职场文书
医院领导班子整改方案
2014/10/01 职场文书
县委务虚会发言材料
2014/10/20 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
学生会工作感言
2015/08/07 职场文书
MySQL Shell import_table数据导入的实现
2021/08/07 MySQL
python3 字符串str和bytes相互转换
2022/03/23 Python
python开发制作好看的时钟效果
2022/05/02 Python