Python之tkinter 标签Label的基本应用
Label()方法可以用于在窗口内建立文字或图像标签它的语法格式如下:Label(父对象, options, ...)参数:父对象:表示这个标签将建立在哪一个父对象(可想成父窗口或者容器内)options参数,如下options参数含义activebackground1. 设置当 Label 处于活动状态(通过 state 选项设置状态)的背景色2. 默认值...
文章目录
- 1、Label 简介
- 2、Label的初步运用
- 3、Widget共同属性Color
- 4、Widget的共同属性 Dimensions
- 5、Widget的共同属性 Anchor
- 6、Label 文字输出换行位置 wraplength
- 7、Widget的共同属性 Font
- 8、Label 的 justify参数
- 9、Widget 的共同属性 Bitmaps
- 10、compound 参数
- 11、Widget 的共同属性 relief
- 12、标签文字与标签区间的间距 padx/pady
- 13、图像 PhotoImage
- 14、Widget 的共同方法 config()
- 15、Widget 的共同属性 Cursors
- 16、Widget 的共同方法 keys()
- 17、分割线 Separator
1、Label 简介
Label()
方法可以用于在窗口内建立文字
或图像
标签
它的语法格式如下:
Label(父对象, options, ...)
参数:
- 父对象:表示这个标签将建立在哪一个父对象(可想成父窗口或者容器内)
- options参数,如下
options参数 | 含义 |
---|---|
activebackground | 1. 设置当 Label 处于活动状态(通过 state 选项设置状态)的背景色 2. 默认值由系统指定 |
activeforeground | 1. 设置当 Label 处于活动状态(通过 state 选项设置状态)的前景色 2. 默认值由系统指定 |
anchor | 1. 控制文本(或图像)在 Label 中显示的位置 2. “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, 或者 “center” 来定位(ewsn 代表东西南北,上北下南左西右东) 3. 默认值是 “center” |
background(bg) | 1. 设置背景颜色 2. 默认值由系统指定 |
bitmap | 1. 指定显示到 Label 上的位图 2. 如果指定了 image 选项,则该选项被忽略 |
borderwidth(bd) | 1. 指定 Label 的边框宽度 2. 默认值由系统指定,通常是 1 或 2 像素 |
compound | 1. 控制 Label 中文本和图像的混合模式 2. 默认情况下,如果有指定位图或图片,则不显示文本 3. 如果该选项设置为 “center”,文本显示在图像上(文本重叠图像) 4. 如果该选项设置为 “bottom”,“left”,“right” 或 “top”,那么图像显示在文本的旁边(如 “bottom”,则图像在文本的下方) 5. 默认值是 NONE |
cursor | 1. 指定当鼠标在 Label 上飘过的时候的鼠标样式 2. 默认值由系统指定 |
disabledforeground | 1. 指定当 Label 不可用的时候前景色的颜色 2. 默认值由系统指定 |
font | 1. 指定 Label 中文本的字体(注:如果同时设置字体和大小,应该用元组包起来,如(“楷体”, 20) 2. 一个 Label 只能设置一种字体 3. 默认值由系统指定 |
foreground(fg) | 1. 设置 Label 的文本和位图的颜色 2. 默认值由系统指定 |
height | 1. 设置 Label 的高度 2. 如果 Label 显示的是文本,那么单位是文本单元 3. 如果 Label 显示的是图像,那么单位是像素(或屏幕单元) 4. 如果设置为 0 或者干脆不设置,那么会自动根据 Label 的内容计算出高度 |
highlightbackground | 1. 指定当 Label 没有获得焦点的时候高亮边框的颜色 2. 默认值由系统指定,通常是标准背景颜色 |
highlightcolor | 1. 指定当 Label 获得焦点的时候高亮边框的颜色 2. 默认值由系统指定 |
highlightthickness | 1. 指定高亮边框的宽度 2. 默认值是 0(不带高亮边框) |
image | 1. 指定 Label 显示的图片 2. 该值应该是 PhotoImage,BitmapImage,或者能兼容的对象 3. 该选项优先于 text 和 bitmap 选项 |
justify | 1. 定义如何对齐多行文本 2. 使用 “left”,“right” 或 "center" 3. 注意,文本的位置取决于 anchor 选项 4. 默认值是 “center” |
padx | 1. 指定 Label 水平方向上的额外间距(内容和边框间) 2. 单位是像素 |
pady | 1. 指定 Label 垂直方向上的额外间距(内容和边框间) 2. 单位是像素 |
relief | 1. 指定边框样式(浮雕) 2. 默认值是 “flat” 3. 另外你还可以设置 “groove”, “raised”, “ridge”, “solid” 或者 “sunken” |
state | 1. 指定 Label 的状态 2. 这个标签控制 Label 如何显示 3. 默认值是 "normal 4. 另外你还可以设置 “active” 或 “disabled” |
takefocus | 1. 如果是 True,该 Label 接受输入焦点 2. 默认值是 False |
text | 1. 指定 Label 显示的文本 2. 文本可以包含换行符 3. 如果设置了 bitmap 或 image 选项,该选项则被忽略 |
textvariable | 1. Label 显示 Tkinter 变量(通常是一个 StringVar 变量)的内容 2. 如果变量被修改,Label 的文本会自动更新 |
underline | 1. 跟 text 选项一起使用,用于指定哪一个字符画下划线(例如用于表示键盘快捷键) 2. 默认值是 -1 3. 例如设置为 1,则说明在 Button 的第 2 个字符处画下划线 |
width | 1. 设置 Label 的宽度 2. 如果 Label 显示的是文本,那么单位是文本单元 3. 如果 Label 显示的是图像,那么单位是像素(或屏幕单元) 4. 如果设置为 0 或者干脆不设置,那么会自动根据 Label 的内容计算出宽度 |
wraplength | 1. 决定 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
,就是控件
或者组件
或者部件
,窗口建立完成后,下一步是在窗口内建立控件。比如Label
、Button
等等,这些全部都是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
使用NW
、n
使用N
、ne
使用NE
、w
使用W
、center
使用CENTER
、e
使用E
、sw
使用SW
、s
使用S
、se
使用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()
运行结果:
当然,gif
和png
是都支持的,同样,如果需要显示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")
运行结果:
注
:bitmap
与image
是不能共存的,如果发生看了这种情况,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()
运行结果:
是不是看起来很美观??
谢谢观看,笔者会持续更新,如有错误或者建议,请私信我
更多推荐
所有评论(0)