详解python tkinter 图片插入问题


Posted in Python onSeptember 03, 2020

通过tkinter.PhotoImage插入GIF, PGM/PPM格式的图片。

import tkinter

class Gui:
  def __init__(self):  
    self.gui=tkinter.Tk()                        # create gui window
    self.gui.title("Image Display")                   # set the title of gui 
    self.gui.geometry("800x600")                    # set the window size of gui 

    img = tkinter.PhotoImage(file="C:/Users/15025/Desktop/bear.gif")  # read image from path

    label1=tkinter.Label(self.gui,image=img)              # create a label to insert this image
    label1.grid()                            # set the label in the main window
 
    self.gui.mainloop()                         # start mainloop

main = Gui()

注意: img = tkinter.PhotoImage(file="C:/Users/15025/Desktop/bear.gif") 中的关键字file不能够省略,否则程序无法正常显示图片。

对于常用的PNG,与JPG格式的图片,我们需要从python image library(pillow)(PIL)导入Image与ImageTk模块来实现,代码如下:

import tkinter
from PIL import Image
from PIL import ImageTk


class Gui:
  def __init__(self):  
    self.gui=tkinter.Tk()                # create gui window
    self.gui.title("Image Display")           # set the title of gui 
    self.gui.geometry("800x600")            # set the window size of gui 

    load = Image.open("C:/Users/15025/Desktop/1.png")  # open image from path
    img = ImageTk.PhotoImage(load)           # read opened image

    label1=tkinter.Label(self.gui,image=img)      # create a label to insert this image
    label1.grid()                    # set the label in the main window
 
    self.gui.mainloop()                 # start mainloop

main = Gui()

然而在实际操作中,本人使用的是Anaconda spyder编译器,当我们在读入图像时程序出错后,再次运行程序就会导致image "pyimage1" doesn't exist错误,每次运行一次,数字就会增加1,如:image "pyimage2" doesn't exist。遇到此错误,可以直接在IPython控制台界面重启IPython内核即可,或者关闭编译器并重新打开。

看似我们已经完全实现了图片的插入,但是这种插入方法是存在隐患的,具体代码如下:

import tkinter as tk
from PIL import Image
from PIL import ImageTk


class Gui(tk.Tk):
  def __init__(self):
    super().__init__()
    self.title("Figure dynamic show v1.01")
    # self.geometry("1000x800+400+100")
    self.mainGui()
    # self.mainloop()
    

  def mainGui(self):
    image = Image.open("C:/Users/15025/Desktop/1.png")
    photo = ImageTk.PhotoImage(image)
    label = tk.Label(self, image=photo)
    label.image = photo     # in case the image is recycled
    label.grid()
    

main = Gui()
main.mainloop()

这里我们可以看到相比较上面的程序,我们将Gui界面的图像插入部分分离到另一个函数中,并且直接定义一个tkinter的类,这样做的好处是我们可以直接用self替代创建的主窗口界面,并且我们可以在不同的地方启动主循环,self.mainloop()和main.mainloop()任选一个即可。并且因为我们想要插入图片,所以我们可以省略指定Gui界面的尺寸,这样做的好处是会创建一个自适应图片大小的Gui界面。最重要的是我们可以看到多了一行代码label.image = photo,我们将选取的图片photo赋值给了label的属性对象image,如果没有这一行代码,图片便无法正常显示,这是因为python会自动回收不使用的对象,所以我们需要使用属性对象进行声明。 上述的程序隐患便是因为缺少了这一行代码。

至此,tkinter的图片插入可暂时告一段落。

到此这篇关于详解python tkinter 图片插入问题的文章就介绍到这了,更多相关python tkinter 图片插入内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现2048小游戏
Mar 30 Python
python排序方法实例分析
Apr 30 Python
selenium+python自动化测试之页面元素定位
Jan 23 Python
python时间序列按频率生成日期的方法
May 14 Python
centos 安装Python3 及对应的pip教程详解
Jun 28 Python
Python如何省略括号方法详解
Mar 21 Python
自学python用什么系统好
Jun 23 Python
如何向scrapy中的spider传递参数的几种方法
Nov 18 Python
利用python爬取有道词典的方法
Dec 08 Python
python opencv实现图像配准与比较
Feb 09 Python
Python图像处理之图像拼接
Apr 28 Python
利用Python将list列表写入文件并读取的方法汇总
Mar 25 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 #Python
PyTorch中Tensor的数据类型和运算的使用
Sep 03 #Python
python开发入门——set的使用
Sep 03 #Python
使用anaconda安装pytorch的实现步骤
Sep 03 #Python
解决Python安装cryptography报错问题
Sep 03 #Python
解决python打开https出现certificate verify failed的问题
Sep 03 #Python
详解torch.Tensor的4种乘法
Sep 03 #Python
You might like
PHP 判断变量类型实现代码
2009/10/23 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
js常用排序实现代码
2010/12/28 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
2014/01/17 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
2016/05/09 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
Angular2 PrimeNG分页模块学习
2017/01/14 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
java遇到微信小程序 "支付验证签名失败" 问题解决
2019/12/22 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
新建文件时Pycharm中自动设置头部模板信息的方法
2020/04/17 Python
什么是Python包的循环导入
2020/09/08 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
集体婚礼策划方案
2014/02/22 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android