详解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 相关文章推荐
在Django的URLconf中进行函数导入的方法
Jul 18 Python
python批量设置多个Excel文件页眉页脚的脚本
Mar 14 Python
Pandas读取MySQL数据到DataFrame的方法
Jul 25 Python
python numpy数组的索引和切片的操作方法
Oct 20 Python
python 划分数据集为训练集和测试集的方法
Dec 11 Python
Python实现将通信达.day文件读取为DataFrame
Dec 22 Python
使用WingPro 7 设置Python路径的方法
Jul 24 Python
Python序列对象与String类型内置方法详解
Oct 22 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
Jun 03 Python
Python datetime模块使用方法小结
Jun 18 Python
pytorch SENet实现案例
Jun 24 Python
python3中calendar返回某一时间点实例讲解
Nov 18 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
真正的ZIP文件操作类(php)
2007/07/21 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
2017/11/24 Javascript
使用socket.io实现简单聊天室案例
2018/01/02 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
python算法学习之计数排序实例
2013/12/18 Python
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
大众服装店创业计划书范文
2014/01/01 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
公务员个人考察材料
2014/12/23 职场文书
歌咏比赛主持词
2015/06/29 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书