![Python GUI设计:tkinter菜鸟编程](https://wfqqreader-1252317822.image.myqcloud.com/cover/737/27111737/b_27111737.jpg)
上QQ阅读APP看书,第一时间看更新
2-12 图像PhotoImage
图片可以应用在许多地方,例如标签、功能按钮、选项按钮、文字区域等。在使用前可以用PhotoImage( )方法建立图像对象,然后再将此对象应用在其他窗口组件上。它的语法如下。
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-552.jpg?sign=1739282415-uDZEj73QkhW7TvU8FLiQPwlhJzrcmaLr-0-8609fecaaa4409dc6f86333517edca47)
需留意PhotoImage( )方法早期只支持gif文件格式,不接受常用的jpg或png格式的图像,目前已经可以支持png格式了。为了使用方便建议将gif图片放在程序所在文件夹中。
可以在Label( )方法内使用“image=imageobj”参数设置此图像对象。
程序实例ch2_19.py:窗口显示html.gif图片的基本应用。
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-554.jpg?sign=1739282415-9QVBglsLQWhsTs4d9UzZ78X1DBZGQI06-0-eeba45330a957813237dc3d2b726da35)
执行结果
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-555.jpg?sign=1739282415-9tVAKZL2wvKLKd8H3WN7XqxhZbnt28wn-0-93b76f07bd7b6e4de7f8eb4e550235eb)
如果想要在标签内显示jpg文件,需要借助PIL模块的Image和ImageTk模块,请先导入pillow模块,如下所示。
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-556.jpg?sign=1739282415-e9a7AIWR9bHciw4NCe778A22B7x6QL0V-0-5b0d3e945582b3b38296cebffed02ad4)
注意在程序设计中需导入的是PIL模块,主要原因是要向旧版Python Image Library兼容,如下所示。
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-557.jpg?sign=1739282415-3cgdjnPnM09WL7Ym9CLC8jDDmgjqJHJS-0-84be6c74ba2e72fb6a5326673221f5bd)
程序实例ch2_19_1.py:在标签内显示yellowstone.jpg。
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-558.jpg?sign=1739282415-ir0QnN0QdaWRIHx3QJUvWBhUATBqccNr-0-fad3c382715ec6389ccaf6a220364722)
执行结果
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-559.jpg?sign=1739282415-ePd2bOH9W95DEau78LKXrtI2ygX9oQmT-0-cb5ef912fb779a6b0666b5655088e2c2)
可以参考2-9节使用compound参数使图像与文字标签共存。
程序实例ch2_20.py:窗口内同时有文字标签和图像的应用。
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-560.jpg?sign=1739282415-zeNdAosLAwk27L23TOrRTCWaC2KkYln7-0-420464d33c622699de873f93a8d4db4f)
执行结果
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-561.jpg?sign=1739282415-vxWKlsmYrtfX1Ypq4mliuxvjAbIvaJmU-0-cabeb705891191d1e22072cfa5bbce77)
由上图执行结果可以看到,文字标签第2行输出时,是默认的居中对齐。我们可以在Label( )方法内增加justify=LEFT参数,让第2行数据靠左输出。
程序实例ch2_21.py:重新设计ch2_20.py,第10行增加justify=“left”参数让文字标签的第2行数据靠左输出,另外让图像显示在文字标签右边。
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-562.jpg?sign=1739282415-JZqB1kIW0Q0ESXNj4LrQ6xRrs5jOuMoY-0-2ddbe967aff27928d7e768755cd34688)
执行结果
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-563.jpg?sign=1739282415-rb55HNoXspBERq3mEb5ZsA5lzye9cDpS-0-bd16b28403e3cd5a8da13352d7b28257)
最后要提醒的是bitmap参数和image参数不能共存,如果发生了这种状况,bitmap参数将不起作用。
程序实例ch2_22.py:图像与文字共存,文字覆盖在图像上方。
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-564.jpg?sign=1739282415-RSsr84tr6fvm3tmQB9aUZLXWngriHXlQ-0-579bad646a8f43b4ae5e174a9d4c4783)
执行结果
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-565.jpg?sign=1739282415-Bd1eyuQrfxaR1mhcKLODMpPocpxf63Y1-0-e99d3d0912d89c078a786148f41a7f56)