python|tkinter组件从0到1学习(含实例操作)
本博文源于python基础,主要针对tkinter组件进行简单学习
GUI概述
GUI是图形用户界面
tkinter图形化库简介
tkinter是python一个图形库,我们先尝试做一个简单的案例,打开图形用户界面tkinter
例子:打开图形用户界面
如果大家连这个包都没有的话,用pycharm装好或者cmd里输入
pip install tkinter
下面我们继续做,在test.py里输入这三行命令。
# -*- coding:utf-8 -*-
import tkinter # 导入模块
root = tkinter.Tk() # 生成root主窗口
root.mainloop() # 生成消息循环
- 头就是一个编码规范-utf-8,
- 导入模块
- 生成主窗口
- 让主窗口消息循环,简单地说,让我们看见别闪退
例子:尝试添加label和button进去
大家学过vb或者安卓编程就更优秀了,它们都是面向对象编程。学会拖控件进去,而python也是同理,只不过python更偏向于命令行,将一个控件显示出来需要两步
- 让类生出一个控件出来
- 让控件放到主窗口中
就这两步原理十分简单:
# -*- coding:utf-8 -*-
import tkinter # 导入模块
root = tkinter.Tk() # 生成root主窗口
label = tkinter.Label(root, text="Hello,tkinter") # 生成标签
label.pack() #将标签添加到root窗口中
button1 = tkinter.Button(root, text="左边按钮") # 生成button1
button1.pack(side=tkinter.LEFT) # 将button1添加到root主窗口中
button2 = tkinter.Button(root, text="右边按钮") # 生成button2
button2.pack(side=tkinter.RIGHT) # 将button2添加到root主窗口中
root.mainloop() # 生成消息循环
tkinter组件
下面如果要diy出更优秀的图形效果就需要组件的学习,下面开始!
组件分类
共14个
组件名称 | 组件功能 |
---|---|
Button | 按钮 |
Canvas | 绘图行组件,可以在其中绘制图形 |
Checkbutton | 复选框 |
Entry | 文本框(单行) |
Frame | 框架,将几个组件组成一组 |
Label | 标签,可以显示文字或者图片 |
Listbox | 列表框 |
Menu | 菜单 |
Message | 与Label组件类似,但是可以根据自身大小将文本换行 |
Radiobutton | 单选框 |
Scale | 滑块 |
Scrollbar | 滑动条 |
Text | 文本框(多行) |
Toplevel | 用来创建子窗口容器组件 |
布局组件
当我们手里生了很多控件之后,如何DIY摆放这是一个大问题。下面我们一起学习摆放的一些种类。牢记本小节一共三种摆放方式。熟练一种,其余了解
pack方法
就是我们在例子二用的方法。
- after:将组件置于其他组件之后
- anchor:组件的对齐方式,顶对齐"n",底"s"左“w”右“e”(用英文中的方位词去记忆)
- before:将组件置于其他组件之前
grid方法
- column:组件所在的列起式位置
- columnspam:组件的列宽
- row:组件所在的行起式位置
- rowspam:组件的行宽
place方法
参数名 | 作用 |
---|---|
anchor | 组件对齐方式 |
x | 组件左上角的x坐标 |
y | 组件左上角的y坐标 |
relx | 组件相对于窗口的x坐标,应为0~1之间的小数 |
rely | 组件相对于窗口的y坐标,应为0~1之间的小数 |
width | 组件的宽度 |
height | 组件的高度 |
relwidth | 组件相对于窗口的宽度,应为0~1之间的小数 |
relheight | 组件相对于窗口的高度,应为0~1之间的小数 |
常用tkinter组件
上面的方法讲完了,按照正常的情况下,我们已经可以布局出自己想要的方式了,但是俗话要想让他们动起来还需要懂得这些知识。知道这些知识可以干嘛呢?就是你在写回调函数和设置颜色设置样式的时候得心应手。毕竟上面的学习只是简单的把布局布置好,而真正的精华却在下面!一起努力!
按钮
说到按钮,大家经常点的东西,在vb中当然可以设置很多样式,python也可以。下面是他的一些参数表
参数名 | 作用 |
---|---|
anchor | 指定按钮上文本的位置 |
background(bg) | 指定按钮的背景色 |
bitmap | 指定按钮上显示的位图 |
borderwidth(bd) | 指定按钮边框的宽度 |
command | 指定按钮的回调函数 |
cursor | 指定鼠标移动到按钮上的指针样式 |
font | 指定按钮上文本的字体 |
foreground(fg) | 指定按钮的前景色 |
height | 指定按钮的高度 |
image | 指定按钮上显示的图片 |
state | 指定按钮的状态 |
text | 指定按钮的文字 |
width | 指定按钮的宽度 |
当大家觉得博主又在难为人的时候,发现我为什么要记这种东西,其实也压根不用记,只需要你将问题转换为你口中的语言,问题已经将要被解决了。比如:
- 问一下,我怎么设置按钮字体微软雅黑
- 怎么设置按钮的文字呀
- 怎么将按钮的宽度改改呀
- 等等不胜枚举
将问题描述出来,就很快得到解决。
例子:测试按钮不同状态
看完这个例子会发现按钮原来是这样子玩的:
实验效果
实验代码
牢记三个步骤开启图形GUI
# -*- coding:utf-8 -*-
import tkinter # 导入模块
root = tkinter.Tk() # 生成root主窗口
botton1 = tkinter.Button(root,anchor=tkinter.E, text='我是按钮1', width = 40, height = 5)
botton1.pack()
botton2 = tkinter.Button(root,anchor=tkinter.E, text='我是按钮2', bg='red')
botton2.pack()
botton3 = tkinter.Button(root,anchor=tkinter.E, text='我是按钮3', width = 14, height = 1)
botton3.pack()
botton4 = tkinter.Button(root,anchor=tkinter.E, text='我是按钮4', width = 60, height = 5, state=tkinter.DISABLED)
botton4.pack()
root.mainloop() # 生成消息循环
文本框
讲完按钮我们处理一下文本框,文本框我们在首文,没用到哟!因此他的设置主要分为两种,一种是单行,另外一种是多行。
tkinter.Text # 多行设置
tkinter.Entry # 单行设置
参数名 | 作用 |
---|---|
background(bg) | 指定文本框的背景色 |
borderwidth(bd) | 指定文本框边框的宽度 |
font | 指定文本框中文字的字体 |
forground(fg) | 指定文本框的前景色 |
selectbackground | 指定选定文本的背景色 |
selectforeground | 指定选定文本的前景色 |
show | 指定文本框显示的字符,若为“*” ,表示文本框为密码框 |
state | 指定文本框的状态 |
width | 指定文本框的宽度 |
这当然也要附上例子哟
例子:尝试用表格中的属性设置文本框
实验效果
实验代码
标签
标签相当于vb中的label就是相当于提醒用户的一个只能看得玩意,有了它界面更加友好。python中除了显示文本当然可以显示图片。在看到上面的两个参数表格中,再去看这个会发现一些都是重复,可谓是记住一个,拓展记忆就行了。
参数名 | 作用 |
---|---|
anchor | 指定标签中文本的位置 |
background(bg) | 指定标签的背景色 |
borderwidth(bd) | 指定标签的边框宽度 |
bitmap | 指定标签的位图 |
font | 指定标签中文字的字体 |
forground(fg) | 指定标签的前景色 |
height | 指定标签的高度 |
image | 指定标签中的图片 |
justify | 指定标签中多行文本的对齐方式 |
text | 指定标签中的文本,可以使用“\n” 表示换行 |
width | 指定标签的宽度 |
例子:尝试用标签组件完成实验效果的图片
实验效果
实验代码
# -*- coding:utf-8 -*-
import tkinter # 导入模块
root = tkinter.Tk() # 生成root主窗口
label1 = tkinter.Label(root,anchor=tkinter.E, bg = 'blue',fg = 'red',text='我是标签1',width=30,height=5)
label1.pack()
label2 = tkinter.Label(root,text='我是标签2',justify=tkinter.LEFT,width=30,height=5)
label2.pack()
label3 = tkinter.Label(root,text='我是标签3',justify=tkinter.RIGHT, width=30,height=5)
label3.pack()
label4 = tkinter.Label(root,text='我是标签4',justify=tkinter.CENTER, width=30,height=5)
label4.pack()
root.mainloop() # 生成消息循环
菜单
我们用pycharm编程的时候,经常调整字体大小、创建项目、创建文件等等。那些都是菜单的功能。大家仔细想象我们用的菜单功能无非是一些最基本的操作。那tkinter其实也有。大家可以看下面的效果
例子:实现添加菜单的主窗口
实验效果
实验代码
为了便于理解,加上了注释,其实布局这种东西,懂得了安卓一丢丢,python gui也并不难
# -*- coding:utf-8 -*-
import tkinter # 导入模块
root = tkinter.Tk() # 生成root主窗口
menu = tkinter.Menu(root) # 生成菜单
# 制作菜单一
submenu = tkinter.Menu(menu,tearoff = 0)
submenu.add_command(label='Open')
submenu.add_command(label='Save')
submenu.add_command(label='Close')
menu.add_cascade(label='File',menu=submenu)
submenu = tkinter.Menu(menu,tearoff = 0)
# 制作菜单2
submenu.add_command(label='Copy')
submenu.add_command(label='Paste')
submenu.add_separator()
submenu.add_command(label = 'Cut')
menu.add_cascade(label='Edit',menu=submenu)
submenu = tkinter.Menu(menu,tearoff = 0)
submenu.add_command(label='About')
# 制作菜单3--帮助
menu.add_cascade(label='Help',menu=submenu)
root.config(menu=menu)
root.mainloop() # 生成消息循环
单选框和复选框
单选框在安卓中非常重要,在python中用tkinter.Radiobutton和tkinter.Checkbutton.学习html的时候单选框也同意设置成一个name,才能实现互斥。这里也一样,通过表格再次深化一下吧!
参数名 | 作用 |
---|---|
anchor | 指定文本的位置 |
background(bg) | 指定背景色 |
borderwidth(bd) | 指定边框宽度 |
bitmap | 指定组件中的位图 |
font | 指定文字的字体 |
forground(fg) | 指定前景色 |
height | 指定高度 |
image | 指定图片 |
justify | 指定多行文本的对齐方式 |
text | 指定标签中的文本,可以使用“\n” 表示换行 |
value | 指定组件被选中关联的变量 |
variable | 指定组件所关联的变量 |
width | 指定宽度 |
大家通过表格要学会发现,value和varible是精华,是单选框和复选框的精华为了更加便于理解,来一个例子
例子:单选框和复选框样式简单学习
实验效果
实验代码
生一个,上墙。可以这么理解代码的执行
# -*- coding:utf-8 -*-
import tkinter # 导入模块
root = tkinter.Tk() # 生成root主窗口
# 单选框布局
r = tkinter.StringVar()
r.set('1')
radio = tkinter.Radiobutton(root,variable = r,value = '1',text='我是男生')
radio.pack()
radio = tkinter.Radiobutton(root,variable = r,value = '2',text='我是女生')
radio.pack()
radio = tkinter.Radiobutton(root,variable = r,value='3',indicatoron=0,text='另类单选框1')
radio.pack()
radio = tkinter.Radiobutton(root,variable = r,value='4',indicatoron=0,text='另类单选框2')
radio.pack()
# 复选框布局
c = tkinter.IntVar()
c.set(1)
check = tkinter.Checkbutton(root,text='我是一个复选框',variable = c,onvalue = 1,offvalue = 2)
check.pack()
check = tkinter.Checkbutton(root,text='另类复选框1',variable = c,indicatoron = 0,onvalue = 1,offvalue = 2)
check.pack()
root.mainloop() # 生成消息循环
print(r.get())
print(c.get())
绘制图形
既然有了海龟绘图,那就再来个canvas绘图也无妨。艺术在于创作呀!
参数名 | 作用 |
---|---|
background(bg) | 指定背景色 |
borderwidth(bd) | 指定边框宽度 |
bitmap | 指定组件中的位图 |
forground(fg) | 指定前景色 |
height | 指定高度 |
image | 指定图片 |
width | 指定宽度 |
下面一些方法的学习可以画出精准的图形,堪比博主的matlab
方法名 | 功能 |
---|---|
create_arc | 绘制圆弧 |
create_bitmap | 绘制位图,支持XBM |
create_image | 绘制图片,支持GIF |
create_line | 绘直线 |
create_oval | 绘制椭圆 |
create_polygon | 绘制多边形 |
create_rectangle | 绘制矩形 |
create_text | 绘制文字 |
create_window | 绘制窗口 |
delete | 删除绘制图形 |
例子:尝试绘制实验效果的图形
看完那么多的方法,自己也可以试试
实验图片
另存为hm.gif.大家应该能理解
实验效果
响应操作事件
布局布的差不多,可以写回调函数了。太激动了
事件基础
事件一共分为三种。键盘、鼠标加窗口
事件绑定分三种,绑定单个、绑定所有、绑定类
绑定单个:bind(sequence,func,add)
绑定类: bind_class(className,sequence,func,add)
绑定所有组件:bind_all(sequence,func,add)
各参数如下:
sequence:所绑定的事件,必须以<>包围的字符串
func:所绑定的事件处理函数
add:可选参数,为空字符或者'+'
className:所绑定的类
通过绑定的三个原型会发现,最难处理的sequence。因此下面学习一下sequence处理的事件及其意义
鼠标事件及其意义
这里的鼠标数字可以切换,鼠标的方式可以切换。学会灵活自由搭配
键盘事件及其意义
窗口事件及其意义
响应事件
窗口中的事件被绑定到函数后,当该事件被触发后将调用所绑定的函数进行处理,事件触发后,系统将向该函数传递一个event对象的参数。因此函数格式如下:
def function(event):
<语句>
属性 | 意义 |
---|---|
char | 按键字符,仅对键盘事件有效 |
keycode | 按键名,仅对键盘事件有效 |
keysym | 按键编码,仅对键盘事件有效 |
num | 鼠标按键,仅对鼠标事件有效 |
type | 所触发的事件类型 |
widget | 引起事件的组件 |
width,height | 引起事件的组件 |
x,y | 鼠标当前位置,相对于窗口 |
x_root,y_root | 鼠标当前位置,相对于整个屏幕 |
更多推荐
所有评论(0)