![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=1739284106-LXEpEQr37Bvw52KoNuWNgtFO6N4FRTbg-0-13f5e32ef0dff62f0d57720f50d3f984)
需留意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=1739284106-kpIOWO8lbxCQ3eBGtSjvkPrBGFMoCqn5-0-72ec742bfda0fcfd80e0ee2529679d06)
执行结果
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-555.jpg?sign=1739284106-5oxRPODMMUNPKJTeY0KOojEmGsoynVnD-0-88e35ab6e639eca1c21684b2f0918ef9)
如果想要在标签内显示jpg文件,需要借助PIL模块的Image和ImageTk模块,请先导入pillow模块,如下所示。
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-556.jpg?sign=1739284106-mgpXwZKcTviBp4WSVM4wB4VIlu3K7yTX-0-5d8dbdc5094da45a4aee18da5cb2ea91)
注意在程序设计中需导入的是PIL模块,主要原因是要向旧版Python Image Library兼容,如下所示。
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-557.jpg?sign=1739284106-WbRG3eGfSx3BXxxAjFTaAiJKYJNJfuD2-0-d8c3767d2129927666637003745263f2)
程序实例ch2_19_1.py:在标签内显示yellowstone.jpg。
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-558.jpg?sign=1739284106-17D7qBzJHSmxZ96QJVP8Ab26jICtgeWQ-0-1f2a88e21944fb73eab9c0d17cb52591)
执行结果
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-559.jpg?sign=1739284106-4Vn7D6LyXyfDqk4wwvIFrqAUYs6s0epi-0-3dd33f37525875a87dda890a95337259)
可以参考2-9节使用compound参数使图像与文字标签共存。
程序实例ch2_20.py:窗口内同时有文字标签和图像的应用。
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-560.jpg?sign=1739284106-NYN6R85IU24utrrlYYJXFnnpM6jfoA2x-0-31b1a0d7006970373bb2e42114441556)
执行结果
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-561.jpg?sign=1739284106-jjO84l3z0xKO54s2neChfLbbDUdd8JxM-0-beab248a842cf19b082315ba635ab4b5)
由上图执行结果可以看到,文字标签第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=1739284106-wF5lBVOcz7aiJwavxFYkQa38WNdpMsY2-0-fdd974259710f42fb29e97d6003ad210)
执行结果
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-563.jpg?sign=1739284106-1DMRUUA0rUoJy5bIzXePeDO2XC2ZPF6G-0-a269433c065574442cf8f7214e1ae7af)
最后要提醒的是bitmap参数和image参数不能共存,如果发生了这种状况,bitmap参数将不起作用。
程序实例ch2_22.py:图像与文字共存,文字覆盖在图像上方。
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-564.jpg?sign=1739284106-6NTEJEc6AKzzbOl7yjpHBPfoh8AIznaP-0-86b9ac10840c1d8878d309ceee4925d0)
执行结果
![](https://epubservercos.yuewen.com/EC6269/15477657104591006/epubprivate/OEBPS/Images/image-565.jpg?sign=1739284106-q14M6eb4F3UEehD5O27ekFdzjeBNhPTa-0-61b533563fbffae9960c9b0f9702a96c)