✨✨✨
感谢优秀的你打开了小白的文章
“希望在看文章的你今天又进步了一点点,离美好生活更近一步!”
本台预告:随着图像处理和人脸识别系列文章的结束,在未来的若干天内将持续更新gui界面编程,欢迎喜欢的小伙伴一起学习!
目录
GUI编程整体描述
常用的组件汇总
Label 标签详解
Label标签实例
运行结果:
图形用户界面是由一个个组件组成,就像小孩“搭积木”一样最终组成了整个界面。有的组件还能在里面再放置其他组件,我们称为“容器”。Tkinter 的 GUI 组件关系图如下:
Tkinter 的 GUI 组件有两个根父类,它们都直接继承了 object 类:
- Misc:它是所有组件的根父类。
- Wm:它主要提供了一些与窗口管理器通信的功能函数。
Misc 和 Wm 派生出子类 Tk,它代表应用程序的主窗口。一般应用程序都需要直接或间接使用 Tk。
Pack、Place、Grid 是布局管理器。布局管理器管理组件的:大小、位置。通过布局管理器可以将容器中的组件实现合理的排布。
BaseWidget 是所有组件的父类
Widget 是所有组件类的父类。Widget 一共有四个父类:BaseWidget、Pack、Grid、
Place。意味着,所有 GUI 组件同时具备这四个父类的属性和方法。
Tkinter 类 |
名称 |
简介 |
Toplevel |
顶层 |
容器类,可用于为其他组件提供单独的容器;Toplevel 有点类似于窗口 |
Button |
按钮 |
代表按钮组件 |
Canvas |
画布 |
提供绘图功能,包括直线、矩形、椭圆、多边形、位图等 |
Checkbutton |
复选框 |
可供用户勾选的复选框 |
Entry |
单行输入框 |
用户可输入内容 |
Frame |
容器 |
用于装载其它 GUI 组件 |
Label |
标签 |
用于显示不可编辑的文本或图标 |
LabelFrame |
容器 |
也是容器组件,类似于 Frame,但它支持添加标题 |
Listbox |
列表框 |
列出多个选项,供用户选择 |
Menu |
菜单 |
菜单组件 |
Menubutton |
菜单按钮 |
用来包含菜单的按钮(包括下拉式、层叠式等) |
OptionMenu |
菜单按钮 |
Menubutton 的子类,也代表菜单按钮,可通过按钮打开一个菜单 |
Message |
消息框 |
类似于标签,但可以显示多行文本;后来当 Label 也能显示 |
多行文本之后,该组件基本处于废弃状态 |
||
PanedWindow |
分区窗口 |
该容器会被划分成多个区域,每添加一个组件占一个区域, 用户可通过拖动分隔线来改变各区域的大小 |
Radiobutton |
单选钮 |
可供用户点边的单选钮 |
Scale |
滑动条 |
拖动滑块可设定起始值和结束值,可显示当前位置的精确值 |
Spinbox |
微调选择器 |
用户可通过该组件的向上、向下箭头选择不同的值 |
Scrollbar |
滚动条 |
用于为组件(文本域、画布、列表框、文本框)提供滚动功能 |
Text |
多行文本框 |
显示多行文本 |
Label(标签)主要用于显示文本信息,也可以显示图像。
Label(标签)有这样一些常见属性:
width,height:
用于指定区域大小,如果显示是文本,则以单个英文字符大小为单位(一个汉字宽度占 2 个字符位置,高度和英文字符一样);如果显示是图像,则以像素为单位。默认值 是根据具体显示的内容动态调整。
font:
指定字体和字体大小,如:font = (font_name,size)
image:
显示在Label 上的图像,目前tkinter 只支持 gif 格式。
fg 和bg:
fg(foreground):前景色、bg(background):背景色
justify:
针对多行文字的对齐,可设置 justify 属性,可选值"left", "center" or "right"
各种label方法的使用:
"""测试Label组件的基本用法,使用面向对象的方式"""
from tkinter import *
class Application(Frame):
def __init__(self, master=None):
super().__init__(master) # super()代表的是父类的定义,而不是父类对象
self.master = master
self.pack()
self.createWidget()
def createWidget(self):
"""创建组件"""
self.label01 = Label(self,text="我爱你", width=10,height=2,
bg="pink", fg="white")
self.label01["text"]="我爱你"
self.label01.config(fg="red",bg="pink")
self.label01.pack()
self.label02 = Label(self,text="进步小白", width=10,height=2,
bg="blue", fg="white",font=("黑体", 30))
self.label02.pack()
# 显示图像
global photo # 把photo声明成全局变量。如果是局部变量,本方法执行完毕后,图像对象销毁,窗口显示不出图像。
photo = PhotoImage(file="imgs/a.gif")
self.label03 = Label(self, image=photo)
self.label03.pack()
self.label04 = Label(self, text="小白小白yyds!",
borderwidth=5,relief="groove",justify="right")
self.label04.pack()
if __name__ == '__main__':
root = Tk()
root.geometry("600x560+300+400")
app = Application(master=root)
root.mainloop()