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