tkinter-label

本文介绍tkinter中label控件的使用。结合实际的示例来理解label控件的使用,看完本文基本上就能理解label各个属性的含义并能灵活使用,做到心中有谱。

标签(label)

标签(label)控件中可以显示文字和图像。label显示的文本内容是可以动态更新。

标签属性

background\bg,

表示显示区的背景色

# bg 设置显示区的背景颜色
# 如果没有指定显示区的宽高,label会自适应text文字的宽高
label1 = Label(main_win, bg='white', text='hello', anchor='center')
label1.pack()
# 如果label显示区是自适应文字的宽高,那么设置anchor其实没有实际作用
label2 = Label(main_win, bg='white', text='hello', anchor='se')
label2.pack()

在这里插入图片描述

text

指定显示的文本,文本中的’\n’将会换行。

width

指定显示区的宽度,如果没有指定,将自适应文本实际的宽度。如果显示区的内容是文本,那么以字符为单位;

如果显示区的内容是图片,那么以像素为单位。

height

指定显示区的高度

anchor

锚点,用来指定文本或图像在label显示区的显示位置。默认值是"center",可设置的值为’n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’; ‘e’、‘w’、‘s’、'n’分别表示东西南北。

# width height 设置显示区的宽高
# 这里我们将显示区的宽和高设置为40和10,anchor为'se'
# 最终的显示效果是 hello在显示区的东南方,也就是右下角;
# 另外宽和高的单位不是像素,而是字符.例如,显示区的宽度为40个字符的宽度
label1 = Label(main_win, width=40, height=10, bg='white', text='hello', anchor='se')
label1.pack()

在这里插入图片描述

foreground\fg

指定文本显示颜色

# fg 将前景色设置成红色, 即设置文本的颜色为红色
# 同时将anchor设置成'ne', 将文本显示在东北方,也就是右上角
label1 = Label(main_win, width=40, height=10, fg='red', bg='white', text='hello', anchor='ne')
label1.pack()

在这里插入图片描述

font

指定字体

# font 设置字体.
# 从显示效果可以看出,显示区的宽和高虽然设置成了固定的数值,但是随着字体的变大,显示区域也跟着变大了
# 为什么?因为宽和高的单位是用字符来度量了,如果字符变大了,那么label的显示区域也就跟着变大了
label1 = Label(main_win, font=("Courier", 20, "bold"), width=40, height=10, fg='red', bg='white', text='hello', anchor='ne')
label1.pack()

在这里插入图片描述

cursor

指定鼠标在标签显示区域时的显示样式,样式的值是’arrow’, ‘watch’, ‘cross’

label1 = Label(main_win, cursor="cross", width=40, height=10, fg='red', bg='white', text='hello', anchor='ne')
label1.pack()

image

给label指定显示的图片

image属性只支持四种格式的图片PGM, PPM, GIF, PNG

如果要显示其他格式的图片,需要借助另外的库来处理,例如要显示jpg图片,就需要PIL库。

# 将主窗口的尺寸设置大一些,使其容纳两张图片
main_win.geometry(f'{800}x{800}')
img_list = []
# 使用PhotoImage()读取图片数据
gif = PhotoImage(file='test.gif')
png = PhotoImage(file='qq.png')
# 将图片数据放入列表
img_list.append(gif)
img_list.append(png)
# 显示列表中的图片
for img in img_list:
    Label(main_win, image=img).pack()

在这里插入图片描述

jpg = PhotoImage(file='github.jpg')
Label(main_win, image=jpg).pack()

# 执行后会报错:_tkinter.TclError: couldn't recognize data in image file "github.jpg"
# 也就验证了我前面提到的image只支持直接显示4种格式的图片
# 那么问题来了,我们要怎么显示jpg格式的图片呢?
main_win.geometry(f'{800}x{800}')
# 显示png图片需要使用PIL库将图片数据转换为Label可识别的image
img = ImageTk.PhotoImage(Image.open(r'github.jpg'))
label1 = Label(main_win, image=img, bg='blue')
label1.pack()

在这里插入图片描述

bitmap

从属性名上可以知道,该属性是用来显示位图的。是否能显示常见的图片呢?我们通过代码试试。

# bitmap
# 显示tkinter内置的位图
bitmap_list = ['error', 'hourglass', 'questhead', 'info',
                'question', 'warning', 'gray12', 'gray50', 
                'gray75']
for bitmap in bitmap_list:
    Label(main_win, bitmap=bitmap).pack()

# 通过本例可以知道,bitmap属性的值是字符串

在这里插入图片描述

bitmap属性的值是字符串,字符串值只有两种,一种就是前面使用的内置位图的字符串,另一种是使用 @+xbm后缀的文件名。

重点:仅支持xbm格式且xbm的路径要使用@开头

xbm = 'qq.xbm'
# 将qq.png转换为单通道的qq.xbm图片
Image.open('qq.png').convert("1").save(xbm)
Label(main_win, bitmap='@'+xbm).pack()

在这里插入图片描述

borderwidth\bd

指定标签边框宽度

padx

指定水平方向上内容和边框的间距

pady

指定垂直方向上内容和边框的间距

下图即是label内部不同属性的构成:
在这里插入图片描述

main_win.geometry(f'{800}x{800}')
label1 = Label(main_win, text="渔道", fg='blue', background="green")
label1.pack()

label2 = Label(main_win, text="渔道", fg='blue', background="green",
                width = 20, height=10)
label2.pack()

# borderwidth
label3 = Label(main_win, text="渔道", fg='blue', background="green",
                width = 20, height=10, borderwidth=10)
label3.pack()

# padx pady
label4 = Label(main_win, text="渔道", fg='blue', background="green",
                width = 20, height=10, borderwidth=10,
                padx = 10, pady = 10)
label4.pack()

上面例子的显示结果可以看出,如果设置bd、padx、pady,label的显示区会相应变大.
在这里插入图片描述

relief

指定边框样式,默认样式为’flat’,样式的种类有:‘flat’, ‘groove’, ‘raised’, ‘ridge’, ‘solid’, ‘sunken’

如果bd的宽度变大,relief显示的边框也会跟着变大。

# relief
main_win.geometry(f'{800}x{800}')
relief_list = ['flat', 'groove', 'raised', 'ridge', 'solid', 'sunken']

for relief in relief_list:
    Label(main_win, text="渔道", fg='red', background="green",
                width = 10, height=5, borderwidth=10, 
                padx=10, pady=10, relief=relief).pack()

在这里插入图片描述

justify

定义对齐,"left"左对齐,"center"居中,"right"右对齐

# justify
poem = '''
            将进酒
             李白
君不见黄河之水天上来,奔流到海不复回。
君不见高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
烹羊宰牛且为乐,会须一饮三百杯。
岑夫子,丹丘生,将进酒,杯莫停。
与君歌一曲,请君为我倾耳听。
钟鼓馔玉不足贵,但愿长醉不愿醒。
古来圣贤皆寂寞,惟有饮者留其名。
陈王昔时宴平乐,斗酒十千恣欢谑。
主人何为言少钱,径须沽取对君酌。
五花马、千金裘,呼儿将出换美酒,与尔同销万古愁。
'''
main_win.geometry(f'{800}x{800}')
Label(main_win, text=poem, fg='white', justify="center", background="blue",
            borderwidth=10, 
            padx=10, pady=10, relief='ridge').pack()

Label(main_win, text=poem, fg='white', justify="left", background="blue",

            borderwidth=10, 
            padx=10, pady=10, relief='ridge').pack()

在这里插入图片描述

state

指定label的状态,normal(默认)/active/disable

activebackground

指定label为active状态时的背景颜色

activeforeground

指定label为active状态时的前景颜色

label1 = Label(main_win, text='渔道', bg='white', state='active', 
            activeforeground='red', activebackground='green')
label1.pack()

label2= Label(main_win, text='渔道', bg='white', state='normal', 
            activeforeground='red', activebackground='green')
label2.pack()

label1标签的state为active,背景显示为绿色,文字显示位红色

label2标签的state为normal,背景显示为白色,文字显示为默认的黑色

可以看出只有在控件的state为active时,activeforeground和activebackground才会生效。

在这里插入图片描述

disabledforeground

当标签的状态为DISABLE时,文字的显示颜色

label1 = Label(main_win, text='渔道', bg='white', state='disable', 
            disabledforeground='red', activebackground='green')
label1.pack()

label2= Label(main_win, text='渔道', bg='white', state='normal', 
            activeforeground='red', activebackground='green')
label2.pack()

在这里插入图片描述

textvariable

显示 StringVar变量的内容,作用是可以动态的更新label显示的内容。

text_var = StringVar() 
text_var.set("你好,渔道")
label1 = Label(main_win, width=40, height=10, bg='white', textvariable=text_var, anchor='se')
text_var.set("你好,python")
label1.pack()

从下图的执行结果,我们可以看出,'你好,python’将’你好,渔道’覆盖了,就是因为动态更新了。

在这里插入图片描述

underline

指定下划线,从第0个字符开始直到underline指定的n。默认underline为-1表示不显示下划线。

label1 = Label(main_win, width=40, height=10, bg='white', text='hello', underline=2)
label1.pack()

从下图可以看出,第一个字母l下有下划线显示

在这里插入图片描述

wraplength

指定每一个行最大的像素数。注意了!是以像素为单位,而不是字符。

txt = '12345678'
label1 = Label(main_win, bg='white', text=txt, wraplength=10)
label1.pack()

在这里插入图片描述

好了,标签的属性就介绍到这里。

创作不易,如果你有所收获,请不吝点赞,如有不足之处,欢迎下方评论,谢谢!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章