python|tkinter组件从0到1学习(含实例操作)

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 鼠标当前位置,相对于整个屏幕
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章