详解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网络编程学习笔记(二):socket建立网络客户端
Jun 09 Python
python单例模式实例分析
Apr 08 Python
新手如何快速入门Python(菜鸟必看篇)
Jun 10 Python
python+django加载静态网页模板解析
Dec 12 Python
python实现m3u8格式转换为mp4视频格式
Feb 28 Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 Python
python机器学习库scikit-learn:SVR的基本应用
Jun 26 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
Python3批量移动指定文件到指定文件夹方法示例
Sep 02 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
Dec 17 Python
利用python进行文件操作
Dec 04 Python
tensorflow中的数据类型dtype用法说明
May 26 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
图形数字验证代码
2006/10/09 PHP
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
PHP 第一节 php简介
2012/04/28 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
asp 取文本框名称代码
2008/12/02 Javascript
根据邮箱的域名跳转到相应的登录页面的代码
2012/02/27 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
[38:39]KG vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
利用Python如何制作好玩的GIF动图详解
2018/07/11 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
解决方案设计综合面试题
2015/08/31 面试题
农行实习自我鉴定
2013/09/22 职场文书
修理厂厂长岗位职责
2014/01/30 职场文书
科级干部考察材料
2014/02/15 职场文书
六查六看自查材料
2014/02/17 职场文书
三年级学生评语
2014/04/23 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
基层工作经历证明
2015/06/19 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
Python图片处理之图片裁剪教程
2021/05/27 Python
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL
如何优化vue打包文件过大
2022/04/13 Vue.js
vue3 自定义图片放大器效果的示例代码
2022/07/23 Vue.js