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鼠标当前位置,相对于整个屏幕
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐