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性能优化的20条建议
Oct 25 Python
Django验证码的生成与使用示例
May 20 Python
Python 编码规范(Google Python Style Guide)
May 05 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
Python最小二乘法矩阵
Jan 02 Python
python变量命名的7条建议
Jul 04 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
Jul 05 Python
python实现按行分割文件
Jul 22 Python
浅谈python3中input输入的使用
Aug 02 Python
python生成器用法实例详解
Nov 22 Python
Python代码一键转Jar包及Java调用Python新姿势
Mar 10 Python
浅谈Python中range与Numpy中arange的比较
Mar 11 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中Y2K38的漏洞解决方法实例分析
2014/09/22 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
php简单实现单态设计模式的方法分析
2017/07/28 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
详解Python文本操作相关模块
2017/06/22 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
python中logging库的使用总结
2017/10/18 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
Django权限设置及验证方式
2020/05/13 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
信息管理专业推荐信
2013/10/29 职场文书
几款流行的HTML5 UI框架比较(小结)
2021/04/08 HTML / CSS
PL350与SW11的比较
2021/04/22 无线电
SQL Server中搜索特定的对象
2022/05/25 SQL Server