本节知识大纲:
Python里的图形化界面(GUI)模块主要有Tkinter(python自带)、PyQt、wxPython,我们这节主要讲解Tkinter组件:
一、Tkinter介绍
tkinter模块只要用户安装好Python环境就可以直接使用;
1. 第一个tkinter程序
import tkinter as tk # 给tkinter重命名为tk
root = tk.Tk() # 新建一个窗体
root.mainloop() # 展示窗体
2. 设置属性并添加控件
设置窗体标题、指定窗体大小、添加按钮、输入框、标签并布局
import tkinter as tk
root = tk.Tk()
# 为窗体设置一个标题
root.title("第一个tkinter窗体")
# 指定窗体的大小,这里的乘号是小写字母x
root.geometry("400x300")
# 添加一个标签
Label01 = Label(root,text = "第一个label标签")
# 将标签布局到窗体上
Label01.pack()
# 添加一个按钮,可以在创建按钮的同时在句尾调用pack语句进行布局
Button01 = Button(root,text = "确定").pack()
# 添加一个单行文本框
Entry01 = Entry(root).pack()
# 展示窗体
root.mainloop()
二、控件的属性
1. tkinter常用的控件属性
(1)定义控件的名称使用参数text
,传入的字符串值即为控件的名称;
(2)定义控件高度使用参数hight
,宽度使用参数width
,传入的值为整形数值;
(3)定义控件在空间中的位置,使用参数anchor
,传入的字符参数为e、s、w、n
以地图的东南西北来定义为右下左上,也可以同时设置左下sw、左上nw、右下se、右上ne;
(4)定义控件的背景色,使用参数bg,前景色使用参数fg,传入字符值可以直接是对应颜色的英文名称;
(5)设置布局在pack()函数里,使用参数side,传入的值为常量tk.LEFT
或者tk.RIGHT
,表示从左到右或者从右到左布局
(6)创建图片控件时,图片控件的文件源使用参数file,传入的字符值为为文件路径,在控件中使用图片则使用参数image,传入的值为图片控件变量;
(7)设置整个窗体的尺寸,使用参数geometry,传入的值为字符值,注意乘号用小写字母x代替;如果要设置长400宽300的窗体则使用语句geometry = "400x300"
(8)设置控件与边界的距离在pack函数里使用参数padx,设置左右距离,使用pady设置上下距离
2. 案例演示:画出一个简单的窗体布局
import tkinter as tk
# 新建一个窗体名称:root
root = tk.Tk()
# 为窗体添加一个标题
root.title("第二个Python窗体")
# 新建标签
photo = tk.PhotoImage(file = "/Users/yushengtan/Desktop/image.png")
Label01 = tk.Label(root,text = "第一个Label标签",anchor = "se").pack(side = tk.LEFT)
imageLable01 = tk.Label(root,image = photo).pack(side = tk.LEFT)
Label02 = tk.Label(root,text = "第二个Label标签",bg = "blue",fg = "white",font = ("华文宋体",20)).pack()
Label03 = tk.Label(root,text = "第三个Label标签",).pack()
Label04 = tk.Label(root,text = "第四个Label标签").pack()
Label05 = tk.Label(root,text = "第五个Label标签").pack()
Button01 = tk.Button(root,text = "确定").pack()
# 显示
root.mainloop()
效果演示:
3. 案例演示:画出能计算加法的计算器界面
# 导包的时候使用*,创建控件的时候不用写类名了
from tkinter import *
# 创建一个窗体,名称为root
root = Tk()
# 为窗体添加标题
root.title("求两数之和")
root.geometry("700x80")
photo = PhotoImage(file = "/Users/yushengtan/Desktop/calc.png")
# 定义控件
PhotoLabel = Label(root,image = photo).pack(side = LEFT,padx = 10,pady = 5)
# 第一个数字文本框
Entry01 = Entry(root,bg = "pink",width = 10,font = ("华文黑体",20)).pack(side = LEFT,padx = 5,pady = 5)
# 加号
Label_plus = Label(root,text = "+",font = ("华文黑体",20)).pack(side = LEFT,padx = 5,pady = 5)
# 第二个数字文本框
Entry02 = Entry(root,bg = "pink",width = 10,font = ("华文黑体",20)).pack(side = LEFT,padx = 5,pady = 5)
# 等于号
Label_equal = Label(root,text = "=",font = ("华文黑体",20)).pack(side = LEFT,padx = 5,pady = 5)
# 第三个数字文本框
Entry03 = Entry(root,bg = "green",width = 10,font = ("华文黑体",20)).pack(side = LEFT,padx = 5,pady = 5)
Button01 = Button(root,text = "计算",width = 10,height = 2,font = ("华文黑体",15)).pack(side = LEFT,padx = 10,pady = 5)
# 运行
root.mainloop()
界面效果:
三、基本布局
1. place绝对布局
pack布局是按顺序布局,而place布局可以直接定义绝对位置,只需要给place()函数里传入两个参数x和y,其值为整型数值表示相对于窗体左上角的坐标位置;用法如place(x=10,y=20)
案例演示:
绘制一个简易的登录界面
from tkinter import *
root = Tk()
root.title("用户登录")
root.geometry("400x180")
Label_username = Label(root,text = "登录名:",font = ("华为黑体",16)).place(x = 50,y = 20)
Entry_username = Entry(root,font = ("华文黑体",16),width = 20).place(x = 120,y = 20)
Label_password = Label(root,text = "密 码:",font = ("华为黑体",16)).place(x = 50,y = 60)
Entry_password = Entry(root,font = ("华文黑体",16),width = 20).place(x = 120,y = 60)
Button_login = Button(root,text = "登录",font = (