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正则表达式的使用
Jun 12 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
Sep 08 Python
Django如何实现内容缓存示例详解
Sep 24 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
Nov 23 Python
pandas系列之DataFrame 行列数据筛选实例
Apr 12 Python
Python装饰器原理与用法分析
Apr 30 Python
django最快程序开发流程详解
Jul 19 Python
用Python抢火车票的简单小程序实现解析
Aug 14 Python
python 使用opencv 把视频分割成图片示例
Dec 12 Python
Python selenium爬虫实现定时任务过程解析
Jun 08 Python
pycharm 代码自动补全的实现方法(图文)
Sep 18 Python
浅谈怎么给Python添加类型标注
Jun 08 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
php 传值赋值与引用赋值的区别
2010/12/29 PHP
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
2017/11/24 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
vue父组件点击触发子组件事件的实例讲解
2018/02/08 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
vue实现随机验证码功能的实例代码
2019/04/30 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
python插入数据到列表的方法
2015/04/30 Python
python实现多人聊天室
2020/03/31 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
python 调试冷知识(小结)
2019/11/11 Python
Keras load_model 导入错误的解决方式
2020/06/09 Python
大一新生军训时的自我评价分享
2013/12/05 职场文书
写自荐信要注意什么
2013/12/26 职场文书
企业承诺书格式范文
2015/04/28 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
python基于tkinter制作下班倒计时工具
2021/04/28 Python
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript