目录:
文章目录- 课时一
- kinter 介绍
- 查询官方帮助:`help(tkinter)`
- 概念介绍
- 最简单的界面
- 实现简单的模块
- 组件的摆放方式
- pack()方式例子
- gird() 方式例子
- place方式例子
- 课时二
- 基本(标准)属性介绍
- 外形尺寸
- 坐标系
- 颜色
- 字体属性
- 锚点
- 三维效果
- 位图
- 鼠标
- 图片
- 设置界面大小,几何字符串
- 常用组件
- Frame 框架
- Label 标签
- Button 按钮
- Entry 单行文本输入框
- Text 多行文本
- Checkbutton 复选框
- Radiobuution 单选框
- Canvas 画布
- Listbox 列表框(盒子)
- Menu 菜单
- Menubutton 菜单按钮
- OptionMenu 设置菜单
- Message 消息框
- Scale 进度条
- Scrollbar 滚动条
- Toplevel 顶层组件
- Spinbox 输入空间
- PanedWindow 窗口布局管理
- LabelFrame 容器控件
- messagebox 消息框
GUI:用户交互界面
kinter 介绍
是python自带的gui库,对图形图像处理库tk的封装
自带用着方便,跨平台,够用。
其他gui:pythonwin,wxpython,pyQT等等。
导入tkinter 库:import tkinter
查询官方帮助:help(tkinter) 概念介绍- 组件:组成界面的构成内容就是组件。按钮,文本输入框,滚动条,列表,菜单等等。
- 窗口:一个软件的矩形区域。
最简单的界面
# 导入模块 import tkinter # 创建主窗口对象 root = tkinter.T=Tk() # 实例化主体,类 # 将主窗口加入消息循环 root.mainloop()
实现简单的模块
# 导入模块 import tkinter # 创建主窗口对象 root = tkinter.Tk() # 实例化主体,类 # 设置窗口的大小 root.minsize(300, 300) # 设置窗口的最小大小为200*200px # 加入一个按钮的组件 # 先创建一个按钮组件 btn = tkinter.Button(root, text = '这是按钮的文本') # root 表示将这个按钮放在哪里 (只是在内存中创建了,并没有摆放) # 摆放按钮(最简单的) btn.pack() # 将主窗口加入消息循环 root.mainloop()
组件的摆放方式
- pack()方式 --> 方位摆放方法(上下左右)(不推荐使用)
a. 上(top),下(bottom),左(left),右(right) - grid()方式 --> 网格摆放方法(网格坐标)
a. 把界面变成网格,对网格横纵坐标编号.告诉坐标就可以把组件放在具体地方.
b. 适合做格子类的东西,计算器 颜色选择框等. - place()方式 --> 定位摆放方法(具体像素)
a. 也有横纵坐标单位是像素.告诉离上边有多远,离左边有多远 即可确定位置 .
b. 适合软件拖放的架构
# pack()方式: import tkinter root = tkinter.Tk() --- # 创建组件 btn1 = tkinter.Button(root, text = '按钮1') btn1.pack(sidel = 'top') # side表示放,后面值是上下左右,默认是top # 如果是多个组件 上摞的 不好用. # ipadx, ipady : 设置组件的内部间距. btn1.pack(ipadx = 20, ipady = 20) # 横轴纵轴各增加20像素的空间. # padx, pady 表示距离左右上下组件的间距 单位也是px # fill 填充 btn1.pack(fill = 'x') # 水平方向的最大位置(一整行). btn1.pack(fill = 'y') # 垂直方向的最大位置(一整列)但是摆放方式必须是左和右. btn.pack(fill = # expand 设置side是否失效. btn1.pack(expand = 'yes') # 按钮会在中间,占用了所有组件的空间 root.mainloop()
gird() 方式例子
# 网格没有具体大小,取决于当前组件 最大组件的大小!
import tkinter
root = tkinter.Tk()
root.minsize(500, 500)
btn1 = tkinter.Button(root, text = '按钮1')
btn1.grid() # 不设置,默认行列为0
btn1.grid(row = 0, column = 0) # 和上面一个意思
btn2 = tkinter.Button(root, text = '按钮2')
btn2.grid(row = 1, column = 0) # 行1列0
btn3 = tkinter.Button(root, text = '按钮3')
btn3.grid(row = 0, column = 1) # 行0列1
'''
如果想跨行跨列 有如下两个参数:
rowspan: 设置跨行数量
cloumnspan: 设置跨列数量
'''
btn0 = tkinter.Button(root, text = '按钮0')
btn0.grid(row = 2, column = 0, columnspan = 2, ipadx
= 20) #要设置组件的大小
btnd = tkinter.Button(root, text = ' = ')
btnd.grid(row = 0, column = 2, rowspan = 2, ipady
= 20)
root.mainloop()
place方式例子
# 两组属性,不可混合使用!!! # 绝对定位布局 import tkinter root = tkinter.Tk() root.minsize(500, 500) btn1 = tkinter.Button(root, text = '按钮1') btn1.place(x = 100, y = 20, width = 50, height = 50) # 如果不设置组件位置会什么也不出现,但不报错,因为组件没有定位所以显示在看不到的地方了 # x:设置距离左上角的水平长度,y:设置距离左上角的垂直高度. # width:设置组件所占据的宽度,height:设置组件所占的高度. # 这种布局方式拉动主窗口,所有的组件都不会动!因为是绝对定位布局,设置多少就是多少! # 这里所有的单位都是像素 # 相对定位布局。 # 好处是可以随界面变化而变化。 # relx:设置距离左上角的水平长度的百分比,rely:设置距离左上角的垂直高度的百分比. # relwidth:设置组件所占据的宽度的百分比,relheight:设置组件所占的高度的百分比. import tkinter root = tkinter.Tk() root.minsize(500, 500) btn1 = tkinter.Button(root, text = '按钮1') btn1.place(relx = 0.2, rely = 0.1, relwidth = 0.1, relheight = 0.1) # relx:当前组件左边占整个宽度的百分比,高度同理。 # relwidth:设置当前宽度占整体宽度的10%,高度同理。 # 以上设置都是相对于界面宽度和高度的百分比,可以根据界面的大小而改变(取值是0到1) root.mainloop()
课时二
官方文档可以搜索 python tkinter 去官网查询.
基本(标准)属性介绍有tkinter.xxx 这个类的属性,可以选择,也可以自己写参数.
外形尺寸import tkinter root = tkinter.Tk() root.minsize(500, 500) # 所有属性尽量只用默认像素或者其他字符类的值. btn1 = tkinter.Button(root, text = '尺寸') btn1.pack(ipadx = 100, ipady = 200) # 尺寸的绝大部分尺寸的默认单位是像素 root.mainloop()坐标系
btn1 = tkinter.Button(root, text = '坐标系') btn1.place(x = 100, y = 50) # 设置坐标系.颜色
btn1 = tkinter.Button(root, text = '颜色', bg = 'blue') # bg:按钮的背景色. # 可以使用颜色单词 # 使用hex颜色模式(例子:#ff0000)(#红色绿色蓝色)(也就是十六进制颜色) btn1.pack()字体属性
btn1 = tkinter.Button(root, text = '字体', font = ('黑体',40,'bold','italic'))
# 字体设置以元祖出现,分别是 字体,字号,黑体,斜体等等.
btn1.pack()
锚点
btn1 = tkinter.Button(root, text = '锚点', anchor = 'nw') # 锚点就是方向的代名词 # 按照上北下南左东右西 写简写值就可以. btn1.pack(ipadx = 20, iapdy = 20)三维效果
btn1 = tkinter.Button(root, text = '三维效果', relief = 'ridge') # 有几种效果:flat, raised, sunken, groove, ridge # relief关键字 = 值(字符串)即可 # 也可以用 tkinter.FLAT 替代参数. btn1.pack(ipadx = 20, iapdy = 20)位图
btn1 = tkinter.Button(root, text = '位图', bitmap = 'error') # 内置的位图图标库 # bitmap 属性. # error gray75 gray50 gray25 gray12 hourglass info guesthead question waring # 也可以使用自己的位图文件, .xbm(x位图)格式的文件都可以用,代替标准位图名称,使用字符串@ 后跟.xbm文件的路径名. btn1.pack(ipadx = 20, iapdy = 20)鼠标
# 用的比较少,可以自定义鼠标的各种状态,库里自带,也可以去文档中查询 btn1 = tkinter.Button(root, text = '鼠标', cursor = 'heart') btn1.pack(ipadx = 20, iapdy = 20) # 如果要设置整个主窗口 root['cursor'] = 'start'图片
# 有两种 # 第一种bmp格式和位图意思一样.很少用 略 # 第二种 PhotoImage类 # 支持.gif和.pgm和.ppm格式 # 将图片设置为图像推向 long = tkinter.PhotoImage(file = 'long.gif') btn1 = tkinter.Button(root, text = '图片', image = long) btn1.pack()设置界面大小,几何字符串
imoprt tkinter
root = tkinter.Tk()
root.geometry('300x400') # 几何字符串
常用组件 Frame 框架
功能:用来承载放置其他GUI元素,就是一个容器。用来进行区域划分
# 外部的代码都是重复的省略 frame1 = tkinter.Frame(root, bg = 'black', width = 100, height = 200) frame1.pack() frame2 = tkinter.Frame(roott, bg = 'black' , width = 100, height = 200)) frame2.pack() # 正常情况下是看不到这两个容器的 因为容器是虚拟的,为了方便可以加一个背景颜色就看到了 # 设定背景颜色后 看到很小的两个点 是因为虚拟容器的大小是根据它里面的内容决定的 # 我们可以用width和height参数设定容器的大小. # 下面展示如何在框架中放入内容 # 假设要摆放按钮 btn1 = tkinter.Button(frame1, text = '按钮1') btn1.pack(side = 'left') btn2 = tkinter.Button(frame1, text = '按钮2') btn2.pack(side = 'left') btn3 = tkinter.Button(frame1, text = '按钮3') btn3.pack(side = 'left') # 背景会根据元素的大小调整,所以背景被覆盖了,可以在pack的时候用padx属性设置边框 就可以显示出来了 # 放到框架2 里面是一样的效果 # 但是这样依然不要用pack方式摆放东西!Label 标签
功能:用于显示不可编辑的文本或图标,就是界面上‘死’的东西(文字或图片)
# 外部的代码都是重复的省略 label = tkinter.Label(root, text = '这是一个标签') # 摆放文字 各种通用属性都可以用.但是一样用的少.Button 按钮
功能:点击时执行一个动作
案例:
import tkinter
root = tkinter.Tk()
root.geometry('300x300') # 设置界面大小,用几何字符串设置
btn1 = tkinter.Button(root,)
# root: 表示放的父组件未知子
# bg: 背景色
# text: 文本内容
# fg: 前景色
# font: 字体 (元祖方式 看上面)
# command: 单击按钮时要调用的函数或方法.
# width 和 height 是使用4字符大小,不推荐用
# justify: 设置多行文本的对其方式.left right 等
# state: 状态,按钮能不能点! 用于控制!(active, disabled, normal)
# bd: 边框粗细.单位像素
# 其他去文档里查
btn1.pack()
Entry 单行文本输入框
# 外部的代码都是重复的省略 username = tkinter.Entry(root) username.pack() # 默认20个字符 # 可以自定义 用width属性设置,注意单位是字符. # 通用设置都是一样的 # 如果用密码要掩码的话这样写 password = tkinter.Entry(root, show = '*') # show属性用来显示你输入的内容.做安全用 # Entry 可以用state状态 控制是否可以输入,或者展示用.'disabled'表示关闭 password.pack()
功能:显示一行文本,可以输入的单行文本
Text 多行文本功能:显示多行文本,可以输入的多行文本
Checkbutton 复选框功能:选择框,允许用户选择或不选择一个选项
import tkinter
root = tkinter.Tk()
root.geometry('500x500')
checkbutton = tkinter.Checkbutton(root,text = '要显示的文本') # text 文字是固定的可以这么写
checkbutton.pack()
# 如果字要改变
# 设置显示内容tkinter变量
text = tkinter.StringVar() # 创建变量
text.set('同意此价格') # 设置变量(设置用set,如果想要获取用get)
result = tkinter.Intvar()
checkbutton = tkinter.Checkbutton(root,textvariable = text, variable = result, command = func)
checkbutton.pack()
# vaiable默认是整形,设置复选框勾选与否的值.
# 设置操作checkbutton的方法(也就是勾选后会出发的行为.)
def func():
print(result.get)
# 如果要自定义勾选或者不勾选的值 可以加`onvalue`和`offalue`也就是说得勾选和勾选的值
result = tkinter.Intvar()
checkbutton.pack()
root.mainloop()
Radiobuution 单选框
功能:允许用户从多个选项中选取一个,就是很多选项只能选择一个(小圆点)。
Canvas 画布功能:提供绘图功能,(直线,椭圆,多边形,矩形)可以包含图形或位图。
import tkinter
root = tkinter.Tk()
root.geometry('500x500')
canvas = tkinter.Canvas(root, bg = 'white') #新建一个画布,把它放入主窗口中,并设置背景为白色.
canvas.pack()
# 在画布中绘制一个长方形,用矩形工具
canvas.create_rectangle(20, 20, 100, 100, fill = 'red', outline = 'yellow')
# 前面数字参数中,前d两个参数表示开始矩形左上角点的位置(横轴,纵轴),后面两个参数表示矩形右下角的距离0轴(初始位置的)距离.
# fill 给画出的模块填充颜色
# outline 边框颜色
root.mainloop()
Listbox 列表框(盒子)
功能:一个选项列表,用户可以从中选择。同时展示多个数据.
# 外部的代码都是重复的省略
# 设置listbox的内容
names = ('吕洋', '任真', '吕恒一')
# 将上面数据转换为tkinter的字符串变量.
students = tkinter.StringVar(value = names)
listbox = tkinter.Listbox(root, listvariable = students)
listbox.pack()
Menu 菜单
功能:点下菜单按钮后弹出一个选项列表,用户可以从中选择。
# 1. 创建主菜单 bigmenu = tkinter.Menu(root) # 2. 创建子菜单 filemenu = tkinter.Menu(bigmenu, , tearoff = 0)) # tearoff = 0 关闭菜单飘出来的功能 # 子菜单可以添加功能 filemenu.add_commadn(label = '打开文件', command = 一个函数) filemenu.add_separator() # 在菜单中加入恒线的功能. # 3. 将子菜单加入主菜单 bigmenu.add_cascade(label = '文件', menu = filemenu) # 4. 将主菜单加入界面 root.config(menu) # 在主菜单里配置一个主菜单Menubutton 菜单按钮
功能:用来包含菜单的组件(有下拉式,叠层式等等。)按钮点击弹出菜单栏.
# 重复的主窗口内容略 menbutton = tkinter.Menubutton(root, text = '选择内容') menubutton.pack() # 先建立一个菜单 menu = tkinter.Menu(menubuttion) # 添加选项 # 设置变量 sex = tkinter.StringVar() men.add_radiobutton(label = '男', variable = sex) men.add_radiobutton(label = '男', variable = sex) # 将菜单配置到组件 menubutton.config(menu = menu)OptionMenu 设置菜单
功能:类似下拉列表的效果
# 重复框架内容略
# 创建一个变量用来接收结果
restult = tkinter.StringVar()
result.set('请选择一个问题') # 设置默认显示的值
optionmenu - tkinter.OptionMenu(root, restult, '这是一个问题', '这是二个问题', '这是很多问题.')
Message 消息框
功能:类似于标签,单是可以显示多行文本
Scale 进度条功能:线性"滑块"组件,可设定起始值和结束值,会显示当前位置的精确值.
Scrollbar 滚动条功能:对其支持的组件(文本域,画布,列表框,文本框)提供滚动功能.
Toplevel 顶层组件功能:类似框架为其他空间提供但单独的容器.比如点设置新弹出来一个设置界面 就用到这个.
Spinbox 输入空间功能:与Entry类似,但是可以指定输入范围值.只能输入指定类型的内容.(数字,小数,文本之类的.)
PanedWindow 窗口布局管理功能:是一个窗口布局管理的插件,可以包含一个或者多个子控件.
LabelFrame 容器控件功能:是一个简单的容器控件.常用用于复杂窗口布局,例如设置界面内容太多可以把相关内容的设置装在一起.然后写上说明.
# 外部的代码都是重复的省略 labelframe = tkinter.LabelFrame(root, text = '常规设置') labelframe.pack() # pack内可以用ipadx设置大小 # 也是虚拟框架 要把组件放进去才显示. btn1 = tkinter.Button(labelframe, text = '按钮1') btn1.pack() btn2 = tkinter.Button(labelframe, text = '按钮1') btn2.pack()messagebox 消息框
功能:用于显示你应用程序的消息框.消息框有很多种(消息选择框,文件存储框等),可以以后用的时候慢慢查询.



