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 03 Python
Python Tkinter简单布局实例教程
Sep 03 Python
Python xlrd读取excel日期类型的2种方法
Apr 28 Python
Python聚类算法之凝聚层次聚类实例分析
Nov 20 Python
用yum安装MySQLdb模块的步骤方法
Dec 15 Python
python3.x 生成3维随机数组实例
Nov 28 Python
40行Python代码实现天气预报和每日鸡汤推送功能
Feb 27 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
Feb 29 Python
Python Selenium截图功能实现代码
Apr 26 Python
简述 Python 的类和对象
Aug 21 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
Dec 04 Python
Django一小时写出账号密码管理系统
Apr 29 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邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
php unlink()函数使用教程
2018/07/12 PHP
一段多浏览器的"复制到剪贴板"javascript代码
2007/03/27 Javascript
javascript英文日期(有时间)选择器
2007/05/02 Javascript
flash javascript之间的通讯方法小结
2008/12/20 Javascript
jQuery遍历Table应用示例
2014/04/09 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
Jquery on方法绑定事件后执行多次的解决方法
2016/06/02 Javascript
BootStrap中
2016/12/10 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
Angularjs 1.3 中的$parse实例代码
2017/09/14 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
jQuery实现碰到边缘反弹的动画效果
2018/02/24 jQuery
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
python使用7z解压apk包的方法
2015/04/18 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
关于Python作用域自学总结
2019/06/10 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
英国领先的互联网葡萄酒礼品商:Vintage Wine & Port
2019/05/24 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
美德少年事迹材料
2014/01/23 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
工作岗位职责范本
2015/02/15 职场文书
欠款证明
2015/06/24 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis