1、Python3 程序设计 主讲教师:11 tkinter GUI编程软件工程师系列Python3 程序设计程序设计第11章 tkinter GUI编程 本章内容本章内容 tkinter编程概述 tkinter GUI的布局管理 tkinter的常用组件 tkinter的事件处理 tkinter GUI的应用开发图形用户界面(GUI)应用程序是Python的重要应用之一,标准库tkinter用来实现图形用户界面。软件工程师系列Python3 程序设计程序设计11.1 tkinter编程概述编程概述tkinter模块是Python事实上的GUI库,包含在Python的基本安装包中。使用tkinte
2、r模块编写的GUI程序是跨平台的,可在多种操作系统中运行。第一个第一个tkinter GUI程序程序 组件和容器是GUI编程的两个基本概念。组件是指标签、按钮、列表框等对象,需将其放在容器中显示。容器是指可放置其他组件或容器的对象。软件工程师系列Python3 程序设计程序设计11.1 tkinter编程概述编程概述 第一第一个个tkinter GUI程序程序 tkinter GUI编程步骤(1)导入tkinter模块。import tkinter 或 from tkinter import*(2)创建主窗口对象,如果未创建主窗口对象,tkinter将以默认的顶层窗口作为主窗口。(3)创建标签
3、、按钮、输入文本框等组件对象。(4)打包组件,将组件显示在其父容器中。(5)启动事件循环,GUI窗口启动,等待响应用户操作。例11-1 带有标签和按钮的tkinter GUI程序。软件工程师系列Python3 程序设计程序设计11.1 tkinter编程概述编程概述 设置窗口和组件的属性设置窗口和组件的属性 设置窗口属性常用的方法有title()、geometry()和config()方法。1.title()方法和geometry()方法title()方法用于设置窗口的标题,geometry()用于方法设置窗口的大小。geometry()方法中的参数格式为“宽度x高度”。例11-2 设置了标题
4、和大小的窗口。2.config()方法config()方法用于设置组件文本、对齐方式、前景色、背景色、字体等属性。例11-3 使用config()方法配置组件属性。软件工程师系列Python3 程序设计程序设计11.2 tkinter GUI的布局管理的布局管理 容器中组件的布局是很繁琐的,需要调整组件自身的大小,还要设计和其他组件的相对位置。实现组件布局的方法被称为布局管理器或几何管理器。tkinter使用三种方法来实现布局:pack()、grid()、place(),。Frame作为中间层的容器组件,可以分组管理组件,实现复杂的布局。软件工程师系列Python3 程序设计程序设计11.2
5、tkinter GUI的布局管理的布局管理 使用使用pack()方法的方法的布局布局 pack()方法以块的方式布局组件。pack()方法将组件显示在默认位置,是最简单、直接的用法。pack()方法的参数:side表示组件在容器中的位置;expand表示组件可拉伸;fill取值为X、Y或BOTH,填充X或Y方向上的空间;anchor表示组件在窗口中位置。软件工程师系列Python3 程序设计程序设计11.2 tkinter GUI的布局管理的布局管理 使用使用grid()方法的布局方法的布局 使用grid()方法的布局被称为网格布局,它按照二维表格的形式,将容器划分为若干行和列,组件的位置由行
6、列所在位置确定。在同一容器中,只能使用pack()方法或grid()方法中的一种布局方式。grid()方法的参数:row和column,组件所在的行和列的位置 rowspan和columnspan,组件从所在位置起跨的行数和跨的列数 sticky,组件所在位置的对齐方式 例11-6 使用grid()方法设置组件布局。软件工程师系列Python3 程序设计程序设计11.2 tkinter GUI的布局管理的布局管理 使用使用place()方法的布局方法的布局 比grid()和pack()布局更精确地控制组件在容器中的位置。如果容器大小调整,可能会出现布局不适应的情况。place()方法的参数 x
7、和y,用绝对坐标指定组件的位置 height和width,指定组件的高度和宽度 relx和rely,按容器高度和宽度的比例来指定组件的位置 relheight和relwidth,按容器高度和宽度的比例来指定组件的高度和宽度 例11-7 使用place()方法的布局。软件工程师系列Python3 程序设计程序设计11.2 tkinter GUI的布局管理的布局管理 使用框架的复杂布局使用框架的复杂布局 框架(Frame)是一个容器组件,通常用于对组件进行分组 可以从而实现复杂的布局。例11-8 用Frame实现的复杂布局。属性属性说明说明bd指定边框宽度relief指定边框样式,取值为FLAT(
8、扁平,默 认 值)、R A I S E D(凸 起)、SUNKEN(凹陷)、RIDGE(脊状)、GROOVE(凹槽)和 SOLID(实线)width和和height设置宽度或高度,如果忽略,容器通 常 根 据 内 容 组 件 的 大 小 自 整Frame大小软件工程师系列Python3 程序设计程序设计 11.3 tkinter的常用组件 Label组件组件 用于创建标签的组件,主要用于显示不可修改的文本、图片或者图文混排内容。属性属性说明说明text设置标签显示的文本bg和和fg指定组件的背景色和前景色width和和height指定组件的宽度和高度padx和和pady组件内文本 左右和上下
9、的预留空白宽度)anchor设置文本在组件内部的位置justify设置文本对齐方式font设置字体例例11-9 测试标签的属性测试标签的属性。软件工程师系列Python3 程序设计程序设计 11.3 tkinter的常用组件 Button组件组件 用于创建按钮,通常用于响应用户的单击操作,即单击按钮时将执行指定的函数。Button组件的command属性用于指定响应函数。例11-10 单击Button按钮计算1100的累加值软件工程师系列Python3 程序设计程序设计 11.3 tkinter的常用组件 Entry组件组件 输入组件,用于显示和输入简单的单行文本。部分属性与Label组件相同
10、。属性属性/方法方法说明说明state设置组件状态。validate设置执行validatecommand校验函数的时间validatecommand设置校验函数textvariable获取组件内容的变量get()返回组件中的全部字符delete(first,last=None)删除从 first开始到last之前的字符 Entry组件的常用属性和方法软件工程师系列Python3 程序设计程序设计11tkinter的常用组件 Entry组件组件 控制变量控制变量。控制变量是和组件相关联的一种对象。例如,控制变量与Entry组件关联时,控制变量的值和Entry组件中的文本会关联变化;将控制变量与
11、Radiobutton组件(单选按钮组)关联时,改变单选按钮选择时,控制变量的值随之改变;反之,改变控制变量的值,对应值的单选按钮被选中。例11-11 输入数据并计算累加和。着重体会控制变量的概念。软件工程师系列Python3 程序设计程序设计 11.3 tkinter的常用组件 Listbox组件组件 用于创建列表框,列表框允许用户一次选择一个或多个列表项。Listbox组件的部分属性组件的部分属性和方法和方法 Listvariable属性关联属性关联一个一个StringVar类型的控制变量,该变类型的控制变量,该变量关联列表框全部量关联列表框全部选项,选项,Selectmode用于设置用于
12、设置列表项选择模式列表项选择模式,activate(index)方法用于选中方法用于选中index对应的列表对应的列表项。项。cursection()方法返回方法返回包含选中项包含选中项index的元组,无选中时返回的元组,无选中时返回空空元组。元组。insert(index,relements)方法在方法在index位置插入一个或多个列表位置插入一个或多个列表项。项。软件工程师系列Python3 程序设计程序设计 11.3 tkinter的常用组件 Listbox组件组件 get(first,last=None)方法返回方法返回包含包含first,last范围内的列表项的范围内的列表项的文本
13、文本元组。元组。Listbox组件的部分方法将列表项位置组件的部分方法将列表项位置(index)作为参数。作为参数。Listbox组件中第一个列表项的组件中第一个列表项的index值为值为0,最后一个列表项,最后一个列表项index可以使用常量可以使用常量tkinter.END表示。当前选中列表项的表示。当前选中列表项的index值用常量值用常量tkinter.ACTIVE表示。表示。例例11-12 列表框操作示例。列表框操作示例。软件工程师系列Python3 程序设计程序设计 11.3 tkinter的常用组件 其他组件其他组件 Radiobutton组件,用于创建单选按钮组。Checkbu
14、tton组件,用于创建复选框,用来标识是否选定某个选项。Text组件,用来显示和编辑多行文本。Spinbox输入组件,用于创建在一组选项或一定范围的数字内滚动选择的组件。软件工程师系列Python3 程序设计程序设计11.4 tkinter的事件处理的事件处理 图形用户界面经常需要用户对鼠标、键盘等操作做出反应,这图形用户界面经常需要用户对鼠标、键盘等操作做出反应,这就是事件处理就是事件处理。产生产生事件的鼠标、键盘等称作事件源,其操作称为事件事件的鼠标、键盘等称作事件源,其操作称为事件。对对这些事件作出响应的函数,称为事件处理程序这些事件作出响应的函数,称为事件处理程序。事件事件处理通常使用
15、组件的处理通常使用组件的command参数或组件的参数或组件的bind()方法来方法来实现。实现。软件工程师系列Python3 程序设计程序设计11.4 tkinter的事件处理的事件处理 使用使用command参数实现事件处理参数实现事件处理 单击按钮时,将会触发Button组件的command参数指定的函数。实际上是主窗口负责监听发生的事件,单击按钮时将触发事件,然后调用指定的函数。由command参数指定的函数也叫回调函数。Radiobutton、Checkbutton、Spinbox等组件,都支持使用command参数进行事件处理。例11-17是一个窗体验证的示例,单击按钮对提交的数据
16、进行验证,为了简化程序,用户名和密码保存在一个字典中。软件工程师系列Python3 程序设计程序设计11.4 tkinter的事件处理的事件处理 使用组件的使用组件的bind()方法实现事件处理方法实现事件处理 使用bind()方法来为组件事件绑定处理函数可以实现事件处理。widget.bind(event,handler)widget是事件源,即产生事件的组件;event是事件或事件名称;hander是事件处理程序。常见事件名称如下。单击鼠标左键单击鼠标左键1/Button-1/ButtonPress-1松开鼠标左键松开鼠标左键ButtonRelease-1单击鼠标右键单击鼠标右键3/But
17、ton-3双击鼠标左键双击鼠标左键Double-1/Double-Button-1双击鼠标右键双击鼠标右键Double-3拖动鼠标移动拖动鼠标移动B1-Motion鼠标移动到区域鼠标移动到区域Enter例11-18 bind()方法实现 的事件处理软件工程师系列Python3 程序设计程序设计11.5 tkinger GUI的应用的应用设计了一个包含Label组件、Entry组件、Combobox组件、Radiobutton组件、Checkbutton组件的GUI界面。Combobox组件来自于tkinter.ttk模块。程序运行后,输入考生姓名,选择考生省份、地区,并选择考生类别和专业等信息
18、后,单击“增加”按钮,将学生信息添加到列表框中;选中列表框中的信息后,单击“删除”按钮,将删除列表框中的信息。软件工程师系列Python3 程序设计程序设计软件工程师系列Python3 程序设计程序设计小结 组件组件和容器的概念,设置窗口和组件的属性的和容器的概念,设置窗口和组件的属性的title()方法、方法、geometry()方法和方法和config()方法。方法。tkinter GUI程序的基本结构。程序的基本结构。实现组件布局的方法被称为布局管理器或几何管理器,实现组件布局的方法被称为布局管理器或几何管理器,tkinter使用三使用三种方法来实现布局功能:种方法来实现布局功能:pac
19、k()、grid()、place()。由由tkinter的各种组件构造了窗口中的对象,常用的组件包括的各种组件构造了窗口中的对象,常用的组件包括Label组组件、件、Button组件、组件、Entry组件、组件、Listbox组件、组件、Radiobutton组件、组件、Checkbutton组件等。组件等。图形用户界面经常需要用户对鼠标、键盘等操作做出事件处理。图形用户界面经常需要用户对鼠标、键盘等操作做出事件处理。软件工程师系列Python3 程序设计程序设计作业(1)编制求两个正整形数最小公倍数程序。要求:两个输入框txt、txt2,用来输入整形数据;一个按钮;一个不可编辑的输入组件txt3。当单击按钮时,在txt3中显示两个整形数的最小公倍数的值。(2)设计GUI界面,模拟QQ登录界面,用户输入用户名和密码,如果正确提示登录成功;否则提示登录失败。(3)例9-17使用Button组件的command参数实现事件处理,将事件处理的方法使用bind()方法实现。软件工程师系列Python3 程序设计程序设计