Python编程的第八章这一部分让人有了点GUI的感觉,和照片联系上了。本来想把这几个代码的细节来点抠门式的整理,做到把每行代码都能说出点道道来。一篇谈论外语的音频说是像英国这样的国家,因为英语的万能流行,英国人都不用学什么外语了,以前热门得惊人的法语,英国似乎没有多少学校再把这法语当回事,于是当今英国人的外语教学就在日渐萎缩。
我好像也有这种感觉,有了自己的母语,又有了形形色色的计算机语言,除非职业需要,似乎真用不着再花时间学什么别的语言了。但计算机语言不就相当于一门外语么?你学python,简直就是同时在学习三门语言,一个是汉语,一个是英语,一个就是这个python本身才有的东西,其实也是一门独立的语言,不过不仅仅是为了人际沟通,而是让计算机来和人进行多方沟通罢了。
人这一生,与其说是在与人打交道,换一个角度,不如说是在与语言打交道。到现在就不仅仅是语言,把语言再推广一点,我们还在与图片还有视频打交道呢。我还真没有想到,这编程的事情,到这第八章,就不仅仅是文字代码,还有各种各样的图片了。而要想在python编程中看到图片,至少得把pil或者pillow两个图片库给下载一个。原以为很简单,费了好几天功夫,今天才算是理出点头绪,于是那抠代码的想法就暂且搁置,这篇笔记谈谈pil的装载体验。
下载pil可不是件简单事,反复寻找答案,你按照那些答案去做,连续几天都是白费力气。我的电脑中C与D两盘都有同样的python3.9.3,是不是两盘重复而不能下载呢?我把C盘的python删掉,依然不行。再把D盘的删掉重装,升级到了395版,还是不行。而且问题出得很奇怪,在ps中打python指令进到python解释器,你要退出用quit的时候,这个quit怎么弄都不退出,每次报没有定义。你退不出,自然就装不了你要装的东西。
在这种寻求过程中,学到点以前不知道的东西。比如原先不知道如何在ps中从C盘砖D盘,一查其实很简单,这转盘的小技巧大概再也忘记不了。
这转盘的小技让我对D盘的python产生点疑问,每一次启动出现的顶层文字总是要少一行。以前使用3.9.3不是这样啊!是不是这个3.9.5版本太高呢?干脆再删掉,换成低一点的版次。由是再删python,重装3.9.3。也是让人狐疑之事,3.9.3没了,几个月之前我还是用的3.9.3呢,那就装3.9.4.。装成功了,又是一件现在还没明白的事,那个顶层的两行文字全出现了,再按照要从编译器回到ps的要求使用quit()退回。
哈哈,竟然就成功了。
准备工作做好了,开始来下载照片库PIL。先把pip下载,以下代码明显解决了以前的两个问题。
问题1:在PS中写下指令python,原先只出一行字码,现在两行了,有Type…。
问题2:那个quit()总是报错,现在正常了,直接退到PS。
然后从C盘转到D盘。进到D盘py395,正是紧接python文件的目录。
在这个目录下,开始pip的下载、升级和后续程序。
PS C:\Users\zzx21> python Python 3.9.4 (tags/v3.9.4:1f2e308, Apr 6 2021, 13:40:21) [MSC v.1928 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> quit() PS C:\Users\zzx21> cd.. PS C:\Users> cd.. PS C:\> D: PS D:\> cd python39 PS D:\python39> cd py395 PS D:\python39\py395> pip list Package Version ---------- ------- pip 20.2.3 setuptools 49.2.1 WARNING: You are using pip version 20.2.3; however, version 21.1.2 is available. You should consider upgrading via the 'd:\python39\python.exe -m pip install --upgrade pip' command. PS D:\python39\py395>
在PS D下的目录python39后写上python.exe -m pip install --upgrade pip,即:
PS D:\python39> python.exe -m pip install --upgrade pip Collecting pip Downloading pip-21.1.2-py3-none-any.whl (1.5 MB) |████████████████████████████████| 1.5 MB 939 kB/s Installing collected packages: pip Attempting uninstall: pip Found existing installation: pip 20.2.3 Uninstalling pip-20.2.3: Successfully uninstalled pip-20.2.3 Successfully installed pip-21.1.2 PS D:\python39>
PS D:\python39> pip install pillow Collecting pillow Downloading Pillow-8.2.0-cp39-cp39-win_amd64.whl (2.2 MB) |████████████████████████████████| 2.2 MB 1.1 MB/s Installing collected packages: pillow Successfully installed pillow-8.2.0 PS D:\python39> 用pip install pillow指令,很快完成下载。
PS D:\python39> pip list Package Version ---------- ------- Pillow 8.2.0 pip 21.1.2 setuptools 49.2.1 PS D:\python39>
用pip list也是顺利成功,这个下载结果也可以在目录下去查,可以在在python下的Lib之下查到。
目录照片
但下载后的涉及pillow的代码仍然打不开,只有等待在后的知识补救了。
做成文件viewer-tk.py。
import os, sys from tkinter import * imgdir = 'images' imgfile = 'london-2010.gif' if len(sys.argv) > 1: imgfile = sys.argv[1] imgpath = os.path.join(imgdir, imgfile) win = Tk() win.title(imgfile) imgobj = PhotoImage(file=imgpath) Label(win, image=imgobj).pack() print(imgobj.width(), imgobj.height()) win.mainloop()
但在PS中打不开
PS D:\python39\py395> cd.. PS D:\python39> cd GUI PS D:\python39\GUI> cd Pillow PS D:\python39\GUI\Pillow> python view-tk.py.gif D:\python39\python.exe: can't open file 'D:\python39\GUI\Pillow\view-tk.py.gif': [Errno 2] No such file or directory PS D:\python39\GUI\Pillow> python viewer-tk.py.gif D:\python39\python.exe: can't open file 'D:\python39\GUI\Pillow\viewer-tk.py.gif': [Errno 2] No such file or directory PS D:\python39\GUI\Pillow> python viewer-tk.py File "D:\python39\GUI\Pillow\viewer-tk.py", line 2 from tkinter import ^ SyntaxError: invalid syntax
怀疑导入import后差一个*,补上后依然打不开
PS D:\python39\GUI\Pillow> python viewer-tk.py Traceback (most recent call last): File "D:\python39\GUI\Pillow\viewer-tk.py", line 12, in <module> imgobj = PhotoImage(file=imgpath) File "D:\python39\lib\tkinter\__init__.py", line 4064, in __init__ Image.__init__(self, 'photo', name, cnf, master, **kw) File "D:\python39\lib\tkinter\__init__.py", line 4009, in __init__ self.tk.call(('image', 'create', imgtype, name,) + options) _tkinter.TclError: couldn't open "images\london-2010.gif": no such file or directory PS D:\python39\GUI\Pillow>
目录似乎不对,依然还没有看到图片。
PS D:\python39> cd GUI PS D:\python39\GUI> cd Pillow PS D:\python39\GUI\Pillow> python viewer-PIL.py Traceback (most recent call last): File "D:\python39\GUI\Pillow\viewer-PIL.py", line 13, in <module> imgobj = PhotoImage(file=imgpath) File "D:\python39\lib\site-packages\PIL\ImageTk.py", line 89, in __init__ image = _get_image_from_kw(kw) File "D:\python39\lib\site-packages\PIL\ImageTk.py", line 58, in _get_image_from_kw return Image.open(source) File "D:\python39\lib\site-packages\PIL\Image.py", line 2912, in open fp = builtins.open(filename, "rb") FileNotFoundError: [Errno 2] No such file or directory: 'images\\florida-2009-1.jpg' Exception ignored in: <function PhotoImage.__del__ at 0x000001F217B15040> Traceback (most recent call last): File "D:\python39\lib\site-packages\PIL\ImageTk.py", line 118, in __del__ name = self.__photo.name AttributeError: 'PhotoImage' object has no attribute '_PhotoImage__photo'
似乎是Pil在发挥作用了,但图片却唤不出来,看来还有一段艰苦的路要走。