1、Label 简介

Label()方法可以用于在窗口内建立文字图像标签
它的语法格式如下:

Label(父对象, options, ...)

参数:

  • 父对象:表示这个标签将建立在哪一个父对象(可想成父窗口或者容器内)
  • options参数,如下
options参数含义
activebackground1. 设置当 Label 处于活动状态(通过 state 选项设置状态)的背景色
2. 默认值由系统指定
activeforeground1. 设置当 Label 处于活动状态(通过 state 选项设置状态)的前景色
2. 默认值由系统指定
anchor1. 控制文本(或图像)在 Label 中显示的位置
2. “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, 或者 “center” 来定位(ewsn 代表东西南北,上北下南左西右东)
3. 默认值是 “center”
background(bg)1. 设置背景颜色
2. 默认值由系统指定
bitmap1. 指定显示到 Label 上的位图
2. 如果指定了 image 选项,则该选项被忽略
borderwidth(bd)1. 指定 Label 的边框宽度
2. 默认值由系统指定,通常是 1 或 2 像素
compound1. 控制 Label 中文本和图像的混合模式
2. 默认情况下,如果有指定位图或图片,则不显示文本
3. 如果该选项设置为 “center”,文本显示在图像上(文本重叠图像)
4. 如果该选项设置为 “bottom”,“left”,“right” 或 “top”,那么图像显示在文本的旁边(如 “bottom”,则图像在文本的下方)
5. 默认值是 NONE
cursor1. 指定当鼠标在 Label 上飘过的时候的鼠标样式
2. 默认值由系统指定
disabledforeground1. 指定当 Label 不可用的时候前景色的颜色
2. 默认值由系统指定
font1. 指定 Label 中文本的字体(注:如果同时设置字体和大小,应该用元组包起来,如(“楷体”, 20)
2. 一个 Label 只能设置一种字体
3. 默认值由系统指定
foreground(fg)1. 设置 Label 的文本和位图的颜色
2. 默认值由系统指定
height1. 设置 Label 的高度
2. 如果 Label 显示的是文本,那么单位是文本单元
3. 如果 Label 显示的是图像,那么单位是像素(或屏幕单元)
4. 如果设置为 0 或者干脆不设置,那么会自动根据 Label 的内容计算出高度
highlightbackground1. 指定当 Label 没有获得焦点的时候高亮边框的颜色
2. 默认值由系统指定,通常是标准背景颜色
highlightcolor1. 指定当 Label 获得焦点的时候高亮边框的颜色
2. 默认值由系统指定
highlightthickness1. 指定高亮边框的宽度
2. 默认值是 0(不带高亮边框)
image1. 指定 Label 显示的图片
2. 该值应该是 PhotoImage,BitmapImage,或者能兼容的对象
3. 该选项优先于 text 和 bitmap 选项
justify1. 定义如何对齐多行文本
2. 使用 “left”,“right” 或 "center"
3. 注意,文本的位置取决于 anchor 选项
4. 默认值是 “center”
padx1. 指定 Label 水平方向上的额外间距(内容和边框间)
2. 单位是像素
pady1. 指定 Label 垂直方向上的额外间距(内容和边框间)
2. 单位是像素
relief1. 指定边框样式(浮雕)
2. 默认值是 “flat”
3. 另外你还可以设置 “groove”, “raised”, “ridge”, “solid” 或者 “sunken”
state1. 指定 Label 的状态
2. 这个标签控制 Label 如何显示
3. 默认值是 "normal
4. 另外你还可以设置 “active” 或 “disabled”
takefocus1. 如果是 True,该 Label 接受输入焦点
2. 默认值是 False
text1. 指定 Label 显示的文本
2. 文本可以包含换行符
3. 如果设置了 bitmap 或 image 选项,该选项则被忽略
textvariable1. Label 显示 Tkinter 变量(通常是一个 StringVar 变量)的内容
2. 如果变量被修改,Label 的文本会自动更新
underline1. 跟 text 选项一起使用,用于指定哪一个字符画下划线(例如用于表示键盘快捷键)
2. 默认值是 -1
3. 例如设置为 1,则说明在 Button 的第 2 个字符处画下划线
width1. 设置 Label 的宽度
2. 如果 Label 显示的是文本,那么单位是文本单元
3. 如果 Label 显示的是图像,那么单位是像素(或屏幕单元)
4. 如果设置为 0 或者干脆不设置,那么会自动根据 Label 的内容计算出宽度
wraplength1. 决定 Label 的文本应该被分成多少行
2. 该选项指定每行的长度,单位是屏幕单元
3. 默认值是 0
2、Label的初步运用

列子:建立一个标签,内容是"tkinter"

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="tkinter")
"""包装与定位组件"""
label.pack()
"""传回Label数据类型"""
print(type(label))
# 放在程序最后一行,使程序继续执行
root.mainloop()

运行结果:
在这里插入图片描述
可以看到窗口是最小化的,但是没关系,我们可以拖拽它
它的type类型为:

<class 'tkinter.Label'>

关于这个pack()

我们可以用这种Label().pack()的方式来重新设计程序

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="tkinter").pack()
print(type(label))
# 放在程序最后一行,使程序继续执行
root.mainloop()

放心,也可以运行,但是!!!它的type类型可就变了

<class 'NoneType'>

不再是我们之前的tkinter.Label类型了,这对于我们以后添加属性是很不利的,所以我们不推荐这种方法

3、Widget共同属性Color

所谓Widget,就是控件或者组件或者部件,窗口建立完成后,下一步是在窗口内建立控件。比如LabelButton等等,这些全部都是Widget

共同属性:所以控件都有的属性

  • fg或者foreground:可以设置前景色彩,在此相当于是标签的颜色
  • bg或者background:可以设置背景色彩

例子:设置文字前景色是红色, 背景色是黄色。

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="tkinter", fg="red", bg="yellow")
label.pack()
root.mainloop()

运行结果:
在这里插入图片描述

4、Widget的共同属性 Dimensions

height 可以设置Widget控件的高度,单位是字符高度
width 可以设置Widget控件的宽度,单位是字符宽度

例子:设置标签宽度为15,高度为3,背景色是黄色,前景色是红色

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="tkinter", fg="red", bg="yellow",
                      height=3, width=15)
label.pack()
root.mainloop()

运行结果:
在这里插入图片描述

5、Widget的共同属性 Anchor

Anchor 其实是指标签文字在标签区域输出位置的设置,在默认情况下 Widget 控件是上下与左右都居中对齐。我们也可以使用anchor选项设定 Widget 控件的对齐

在这里插入图片描述
例子:让字符串从标签区间左上角位置输出

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="tkinter", fg="red", bg="yellow",
                      height=3, width=15,
                      anchor="nw")
label.pack()
root.mainloop()

运行结果:
在这里插入图片描述
例子:让字符串从标签区间右下角位置输出

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="tkinter", fg="red", bg="yellow",
                      height=3, width=15,
                      anchor="se")
label.pack()
root.mainloop()

运行结果:
在这里插入图片描述
注:anchor的参数设置也可以使用内建大写常数,例如,nw使用NWn使用Nne使用NEw使用Wcenter使用CENTERe使用Esw使用SWs使用Sse使用SE。 当程序使用大写常数时,可以省略字符串的双引号。
例子:

anchor=tkinter.SE

运行结果跟上面相同

6、Label 文字输出换行位置 wraplength

wraplength 这个参数可以设置标签中的文字在多少宽度后自动换行
例子:让标签中的文字达到20像素宽度后自动换行

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="tkinter", fg="red", bg="yellow",
                      height=3, width=15,
                      anchor=tkinter.NW,
                      wraplength=20)
label.pack()
root.mainloop()

运行结果:
在这里插入图片描述

7、Widget的共同属性 Font

font 参数用于设置文字字形

参数含义
字形family如Helvetica、Times等
字号size单位是像素
weight例如bold、normal
slant例如italic、roman,如果不是italic则是roman
underline例如True、False
overstrike例如True、False

例子:使用Helvetica字形,大小是20,粗体显示

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="tkinter", fg="red", bg="yellow",
                      height=3, width=15,
                      font="Helvetic 20 bold")
label.pack()
root.mainloop()

运行结果:
在这里插入图片描述
其实font 可以用元组的形式,这样更直观

font=("Helvetic", 20, "bold")

结果跟上面一样的

8、Label 的 justify参数

在标签的输出中,如果是多行的输出,在最后一行输出时可以使用justify参数设置所输出的标签内容是lef/center/right( 靠左/居中/靠右),默认是居中输出。
例子:使用默认方式执行多行输出

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="qwertyuiopasdfghjklzxcvbnm", fg="red", bg="yellow",
                      wraplength=50)
label.pack()
root.mainloop()

运行结果:
在这里插入图片描述
可以发现最后一行是默认居中的

例子:设置最后一行是靠左对齐输出

label = tkinter.Label(root, text="qwertyuiopasdfghjklzxcvbnm", fg="red", bg="yellow",
                      wraplength=50,
                      justify="left")

运行结果:
在这里插入图片描述
例子:设置最后一行是靠右对齐输出

label = tkinter.Label(root, text="qwertyuiopasdfghjklzxcvbnm", fg="red", bg="yellow",
                      wraplength=50,
                      justify="right")

运行结果:
在这里插入图片描述

9、Widget 的共同属性 Bitmaps

tkinter也提供了在标签位置放置内建位图功能

名称图形
error在这里插入图片描述
hourglass在这里插入图片描述
info在这里插入图片描述
questhead在这里插入图片描述
question在这里插入图片描述
warning在这里插入图片描述
gray12在这里插入图片描述
gray25在这里插入图片描述
gray50在这里插入图片描述
gray75在这里插入图片描述

例子:在标签位置显示error的位图

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, bitmap="error")

label.pack()

root.mainloop()

运行结果:
在这里插入图片描述

10、compound 参数

当图像与文字共存时,可以使用此参数定义文字与图像的位置关系

参数含义
left图像在左
right图像在右
top图像在上
bottom图像在下
center文字覆盖在图像上方

例子:图像与文字共存时,图像在左边

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, bitmap="error",
                      compound="left", text="我很喜欢写博客")
label.pack()
root.mainloop()

运行结果:
在这里插入图片描述
例子:图像与文字共存时,图像在上方

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, bitmap="error",
                      compound="top", text="我很喜欢写博客")
label.pack()
root.mainloop()

运行结果:
在这里插入图片描述
例子:图像与文字共存时,文字覆盖在图像上方

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, bitmap="error",
                      compound="center", text="我很喜欢写博客")
label.pack()
root.mainloop()

运行结果:
在这里插入图片描述

11、Widget 的共同属性 relief

这个属性也可以应该在许多Widget 控件上面,可以利用relief属性建立Widget 控件的边框

参数含义
flat在这里插入图片描述
groove在这里插入图片描述
raised在这里插入图片描述
ridge在这里插入图片描述
solid在这里插入图片描述
sunken在这里插入图片描述

例子:建立raised属性的标签

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="raised",
                      relief="raised")
label.pack()

root.mainloop()

运行结果:
在这里插入图片描述

12、标签文字与标签区间的间距 padx/pady

在设计标签或其他控件时,若是不设置Widget 的大小,系统将使用最适空间作为此Widget 的大小。
其实也可以通过设置标签文字与标签区间的间距,达到更改标签区间的目的

  • padx:可以设置标签文字左右边界与标签区间的x轴间距。
  • pady:可以设置标签文字上下边界与标签区间的y轴距离。

例子

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="raised",
                      relief="raised",
                      bg="lightyellow",
                      padx=5, pady=10)
label.pack()

root.mainloop()

运行结果:
在这里插入图片描述

13、图像 PhotoImage

图片可以应用在许多地方,例如标签、功能按钮、选项按钮、文字区域等。在使用前可以用PhotoImage()方法建立图像对象,然后再将此对象应用在其他窗口组件上。
语法:

# 拓展名gif,传回图像对象
imageobj = tkinter.PhotoImage(file="xxx.gif")

需留意这个方法,早期只支持gif文件格式,不接受常用的jpg或者png文件格式的图像。但是目前已经可以支持png格式了。为了使用方便,建议将gif放在程序所在的文件夹里。
可以在Label()方法内使用“image=imageobj”参数设置此图像对象
例子

import tkinter

# 创建主窗口
root = tkinter.Tk()
imageobj = tkinter.PhotoImage(file="1.gif")
label = tkinter.Label(root, image=imageobj)
label.pack()

root.mainloop()

运行结果:
在这里插入图片描述
当然,gifpng是都支持的,同样,如果需要显示jpg的话,我们需要借助PIL模块
先安装pillow模块

pip install pillow

注意在程序设计中需导入的是PIL模块,主要原因是向旧版Python Image Library兼容

from PIL import Image, ImageTk

例子:在标签内显示jpg文件

import tkinter
from PIL import Image, ImageTk

# 创建主窗口
root = tkinter.Tk()
image = Image.open("1.jpg")
a = ImageTk.PhotoImage(image)
label = tkinter.Label(root, image=a)
label.pack()

root.mainloop()

运行结果:
在这里插入图片描述

13-1、可以使用compound参数是图像与文字标签共存

例子:窗口内同时有文字标签和图像的应用

import tkinter
from PIL import Image, ImageTk

# 创建主窗口
root = tkinter.Tk()
text = """学习永不止境,要想有更好的前途,
使劲学习,
成就更好的人生
"""
image = Image.open("1.jpg")
a = ImageTk.PhotoImage(image)
label = tkinter.Label(root, text=text, image=a, bg="lightyellow", compound="left")
label.pack()

root.mainloop()

运行结果:
在这里插入图片描述
例子:使文字在左边并且靠左输入

label = tkinter.Label(root, text=text, image=a, bg="lightyellow", compound="right", justify="left")

运行结果:
在这里插入图片描述
例子:图像与文字共存,文字覆盖在图像上方

label = tkinter.Label(root, text=text, image=a, bg="lightyellow", compound="center")

运行结果:
在这里插入图片描述
bitmapimage是不能共存的,如果发生看了这种情况,bitmap参数将不起作用

14、Widget 的共同方法 config()

Widget 控件在建立时可以直接设置对象属性,若是部分属性未建立,未来在程序执行时,如果想要建立或是更改属性,可以使用config()方法。此方法类属性设置的参数用法与建立时相同。
例子:添加一个text内容,并每秒更新一次数据

import tkinter
from PIL import Image, ImageTk

count = 0


def run(test):
    def counting():
        global count
        count += 1
        # 添加属性
        test.config(text=str(count))
        # 间隔一千毫秒后调用counting函数
        test.after(1000, counting)
    counting()


# 创建主窗口
root = tkinter.Tk()
image = Image.open("1.jpg")
a = ImageTk.PhotoImage(image)
label = tkinter.Label(root, image=a, bg="lightyellow", compound="center",
                      font="Heelvetic 20 bold")
label.pack()
run(label)

root.mainloop()

运行结果:
在这里插入图片描述

15、Widget 的共同属性 Cursors

Cursors表示光标的形状,程序设计时,如果想要更改光标形状,可以使用此功能
光标形状可能会因为操作系统不同而有所差异
例子

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="abc", bg="lightyellow",
                      font="Heelvetic 20 bold",
                      cursor="heart")
label.pack()

root.mainloop()

运行结果:
在这里插入图片描述

16、Widget 的共同方法 keys()

之前介绍过Label()方法的所有参数,但是Widget有一个共同方法keys()可以用列表(list)传回这个Widget所有的参数。
例子:传回标签Label()方法中所有的参数。

import tkinter

# 创建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="abc")
label.pack()
print(label.keys())
root.mainloop()

运行结果:

['activebackground', 'activeforeground', 'anchor', 'background', 'bd', 'bg', 'bitmap', 'borderwidth', 'compound', 'cursor', 'disabledforeground', 'fg', 'font', 'foreground', 'height', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'image', 'justify', 'padx', 'pady', 'relief', 'state', 'takefocus', 'text', 'textvariable', 'underline', 'width', 'wraplength']
17、分割线 Separator

我们在设计GUI程序时,有时适度的在适当位置增加分割线可以让整体视觉效果更佳
tkinter.ttk 中有个Separator模块,可以帮助我们增加分割线

Separator(父对象, options)

参数如下:

  • HORIZONTAL:建立水平分割线
  • VERTICAL:建立垂直分割线

例子

import tkinter
from tkinter.ttk import Separator

# 创建主窗口
root = tkinter.Tk()
text1 = "加油!tkinter"
text2 = """说实话,学编程真的太难了,
要不断的努力,我也希望我会成功,
大家都会成功的
"""

label = tkinter.Label(root, text=text1,
                      font="Helvetic 20 bold")
label.pack(padx=10, pady=10)

sep = Separator(root, orient=tkinter.HORIZONTAL)
# pack(fill=tkinter.X, padx=5), 表示此分割线填满X轴, 它与窗口边界左右均相距5像素
sep.pack(fill=tkinter.X, padx=5)

label2 = tkinter.Label(root, text=text2)
label2.pack(padx=10, pady=10)

root.mainloop()

运行结果:
在这里插入图片描述
是不是看起来很美观??

谢谢观看,笔者会持续更新,如有错误或者建议,请私信我

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐