用Tkinter打造GUI开发工具(14)Tkinter小部件的Label标签部件
标签Label部件是Tkinter最常用的部件之一,其语法格式如下。
label=tk.Label ( master, option, ... )
master 参数为其父组件,就是用来放置这个部件的。 像其它部件一样,我们可以在创建部件之后再为其指定属性。因此创建方法中的 options 选项参数可以为空。
首先看Label部件的参数options见表 Label部件的参数options。
Label部件的使用简单,我们前面程序中见过。其中参数anchor、 bg、 fg 、borderwidth、 cursor、 height、 width、 relief、 padx、 pady等都多次介绍,而且给了对比程序。而且这类属性对多数部件来说都是通用的。
我们就不再重复介绍了,主要介绍每个部件的特有属性。下面看一个关于Label部件的演示,程序中给出了详细的注释说明。
# -*- coding: utf-8 -*-
import tkinter as tk #导入Tkinter3模块
#移动窗口到屏幕中央
def setCenter(root,w,h):
ws = root.winfo_screenwidth()
hs = root.winfo_screenheight()
x = int( (ws/2) - (w/2) )
y = int( (hs/2) - (h/2) )
root.geometry('{}x{}+{}+{}'.format(w, h, x, y))
root =tk.Tk() # 创建窗口对象
root.title(string = 'Label部件演示') #设置窗口标题
setCenter(root,500,200) #把主菜单移动的屏幕中央,菜单窗户口大小400X300
label = tk.Label(master=root, #上级部件
text = 'Label部件 '*5, #Label显示的 文字信息
height=3, #高度
width=100, #宽度
justify='right', #对齐方式
bg='yellow', #背景颜色
activebackground='red', #活动状态时的背景色。
takefocus=True) #该Label接收输入焦点
label.pack() #pack()方法放置部件
#只能显示GIF格式的图片
img=tk.PhotoImage(file="coins.gif")
label2 = tk.Label(master=root, #上级部件
text = 'Label2部件'*5, #Label显示的 文字信息
activebackground='red', #活动状态时的前景色。
activeforeground='white', #活动状态时的背景色。
anchor=tk.W, #控制文本或者图像在label中的显示位置。
background='#BCFFFA', #背景色
foreground='black', #前景色
borderwidth=0, #边框宽度
compound=tk.LEFT, #文字在图片的位置
cursor='hand2', #鼠标进入部件时的形状
disabledforeground='green', #禁用时前景色
font=("微软雅黑",12), #字体和大小
highlightbackground='blue', #高亮背景色
highlightcolor='green', #高亮前景色
highlightthickness=2, #高亮边框的宽度
image=img, #要显示的图形对象
height=6, #高度
width=400, #宽度
justify='right', #对齐方式
padx=2, #部件x方向间距
pady=3, #部件y方向间距
underline=10, #在第11个字符下划线
) #在root上创建 label标签
label2.pack() #pack()方法放置部件
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() # 进入消息循环
程序运行结果显示出如下的窗口。
通过上面程序的演示,大家对Label部件有了深刻的认识,对参数的使用方法有了了解。Label部件可以说是Tkinter最常用、最重要的部件。
Tkinter容器组件没有背景图片属性,通常利用Label图片属性,来给容器组件增加背景图片。我们利用Label部件设计一个背景图片类class BackPicture,这个类可以给Tk窗口、Toplevel窗口和框架Frame的背景显示一张图片。
class BackPicture类的入口参数file是符合Tkinter的PhotoImage方法的图片文件,图片格式支持GIF和PNG图形格式。参数img是PhotoImage对象数据。file和img是二选一,优先file参数。
下面看BackPicture类的定义和演示程序。
# -*- coding: utf-8 -*-
import tkinter as tk #装载tkinter模块,用于Python3
root =tk.Tk() # 创建窗口对象
root.title(string = 'BackPicture背景图片显示演示') #设置窗口标题
root.geometry('400x100') #改变窗口大小
img_png =tk.PhotoImage(file = 'b.png') #装载一个图片文件
class BackPicture(tk.Label): #背景图片
'''
这个类可以给Tk窗口、Toplevel窗口和框架Frame的背景显示一张图片。
BackPicture类的入口参数file是符合Tkinter的PhotoImage方法的图片文件,
图片格式支持GIF和PNG图形格式。参数img是PhotoImage对象数据。
file和img是二选一,优先file参数。
bp= BackPicture(root,file = 'b.png') #使用方法一
bp= BackPicture(root,img=img_png) #使用方法二
'''
def __init__(self ,root,file=None,img=None):
self.root=root
self.file=file
self.img=img
if self.file !=None:
self.img=tk.PhotoImage(file =self.file) #装载一个图片文件
tk.Label.__init__(self ,self.root, image = self.img)
self.init()
def init(self):
self.place(x=0, y=0, #坐标起点(0,0)
relwidth=1, #部件相对于窗口的宽度
relheight=1, #部件相对于窗口的高度
bordermode=tk.OUTSIDE #部件边框模式
) #使用place方法的相对位置
#bp= BackPicture(root,file = 'b.png') #使用方法一
bp= BackPicture(root,img=img_png) #使用方法二
b="info"
label2 = tk.Label(master=root, #上级部件为frame
text=b, #显示信息
bitmap=b, #显示图标
width=100, #宽度
background='white', #背景颜色
justify='left', #对齐方式
borderwidth=2, #边框宽度
padx=1, #部件x方向间距
pady=1, #部件y方向间距
compound=tk.LEFT #图片在文字左边
)
label2.pack()
b="question"
label3 = tk.Label(master=root, #上级部件为frame
text=b, #显示信息
fg='yellow',
bitmap=b, #显示图标
width=100, #宽度
background='blue', #背景颜色
justify='left', #对齐方式
borderwidth=2, #边框宽度
padx=1, #部件x方向间距
pady=1, #部件y方向间距
compound=tk.LEFT #图片在文字左边
)
label3.pack(side=tk.BOTTOM,anchor=tk.SW)
root.mainloop() # 进入Tkinter消息循环
这个程序运行结果。
这个class BackPicture类可以给Tk窗口、Toplevel窗口和框架Frame的背景显示一张图片。由于Tkinter的显示有先后优先顺序,这个BackPicture类要在Tk窗口、Toplevel窗口和Frame框架大小固定后,再显示BackPicture背景图片。这个类使用place方法,通过前面学习,我们了解place方法可以与pack方法、grid方法混合使用。因此并不影响原先的tk控件布局,如果tk控件尺寸小,有漏隙,就可以看到窗口背景图片贴图。
(本文为作者书籍《用Tkinter打造GUI开发工具》书中截选,有意合作或出版可联系作者QQ:2775205,量化开发或Tkinter开发咨询群:524949939)
小白python量化分析框架1.00已经设计完成,将随作者量化书一起提供全部源代码。
《用Tkinter打造GUI开发工具》是作者为打造第二代小白python量化分析框架2.0做基础框架模块搭建,未来开发Python程序更加方便和简单。设计的Python应用程序更加美观,功能更加丰富和强大。