用Tkinter打造GUI开发工具(9)Tkinter的位图和图片格式
在Tkinter小部件的位图选项,有下面这些位图是可用的。
上面的图片显示了标准的位图按钮部件能使用的为图。从左到右用后面这些字符串表示,“error”, “gray75”, “gray50”, “gray25”, “gray12”, “hourglass”, “info”, “questhead”,“question”, “warning”。
下面给一个使用位图的例子.
# -*- coding: utf-8 -*-
import tkinter as tk #导入Tkinter3模块
root =tk.Tk() # 创建窗口对象
bitmaps=["error", "gray75", "gray50", "gray25", "gray12"] #系统图标
bitmaps2=[ "hourglass", "info", "questhead","question","warning"] #系统图标
frame=tk.Frame(master=root) #建立一个Frame框架
frame.pack() #pack()方法放置
for b in bitmaps:
label3 = tk.Label(master=frame, #上级部件为frame
text=b, #显示信息
bitmap=b, #显示图标
width=100, #宽度
background='white', #背景颜色
justify='right', #对齐方式
borderwidth=2, #边框宽度
padx=1, #部件x方向间距
pady=1, #部件y方向间距
compound=tk.LEFT #图片在文字左边
)
label3.pack(side=tk.LEFT)
frame2=tk.Frame(master=root)
frame2.pack()
for b in bitmaps2:
label3 = tk.Label(master=frame2, #上级部件为frame2
text=b, #显示信息
bitmap=b, #显示图标
width=100, #宽度
background='white', #背景颜色
justify='right', #对齐方式
borderwidth=2, #边框宽度
padx=1, #部件x方向间距
pady=1, #部件y方向间距
compound=tk.RIGHT #图片在文字右边
)
label3.pack(side=tk.LEFT)
root.mainloop() # 进入消息循环
程序运行结果图下图.
在Tkinter应用程序中有三种显示图形图像的方法。这三种显示方法支持不同的图像文件格式。
1)显示位图(双色)图像。Xbm格式。
显示成白底.xbm格式,需要使用位图构造函数BitmapImage, 创建位图对象的语法格式如下。
bmp=tk.BitmapImage ( file=f[, background=b][, foreground=c] )
其中参数,f是.xbm图像文件的名称。通常情况下,图像中前景(1) bits将显示为黑色像素,背景(0) bits将图像变为透明的。要改变这种行为,使用可选的background = b,选项设置背景颜色b,和可选的foreground=c选项设置前景颜色c。
例如,要显示一个图像作为一个标签,使用一个标签小部件,参数image使用BitmapImage对象图像,相关代码如下。
logo = tk.BitmapImage("logo.xbm", foreground='red')
tk.Label ( image=logo ).pack()
2)显示全色图像。.gif, .pgm,或 .ppm格式。
使用彩色图像.gif、.pgm或者.ppm格式,需要这个构造函数PhotoImage, PhotoImage对象的语法格式如下。
img=tk.PhotoImage ( file=f )
其中f是图像文件的名称。函数返回可以在任何地方使用的Tkinter图像值img。
3)Python成像库(pil)支持更广泛格式的图像。它的图像类是专门为在Tkinter应用程序中显示图像而设计的。
例如下面代码.
# -*- coding: utf-8 -*-
import tkinter as tk
from PIL import Image, ImageTk, ImageDraw, ImageFont
root=tk.Tk()
png1= ImageTk.PhotoImage(Image.open('ico/CLOCK02.ICO'))
label_img = tk.Label(root, image =png1)
label_img.pack()
root.mainloop()
程序运行结果如下图.