第14章 面向对象程序设计基础 课件(共228张PPT)2026年中职高考信息技术类总复习

资源下载
  1. 二一教育资源

第14章 面向对象程序设计基础 课件(共228张PPT)2026年中职高考信息技术类总复习

资源简介

(共228张PPT)
第14章 面向对象程序设计基础
知识与技能要点 考试条目 考试水平
(A/B/C/D)
基本概念 1.面向对象程序设计的基本特征 B
2.对象与类 B
3.类的三大特性:继承、封装、多态 C
4.事件、方法、属性 C
知识与技能要点 考试条目 考试水平
(A/B/C/D)
Tkinter库 1.Label控件 C
2.Button控件 C
3.Checkbutton控件 C
4.Entry控件 C
5.Listbox控件 C
6.Radiobutton控件 C
7.Text控件 C
8.Message控件 C
知识与技能要点 考试条目 考试水平
(A/B/C/D)
面向对象 程序设计 1.事件与事件响应(仅限于鼠标事件和键盘事件) C
2.控件布局 C
3.简单GUI界面程序设计 (仅限于考纲中所列的Tkinter库中控件) D
复习建议
本章内容在职教高考中常以选择题、填空题的形式呈现,难度中等,最后一大题一般为面向对象程序设计,难度较大。建议在复习时重点把握面向对象程序设计基本概念和Tkinter库各控件的常用属性等重要知识点。对于简单GUI界面程序设计题,建议多上机实践,在实践中积累知识和技能。
1.面向对象程序设计的基本特征(B)
“面向对象程序设计”(Object Oriented Programming,即
OOP)是一种程序设计范型,同时也是一种程序开发的方法。对象是类的实例。它将对象作为程序的基本单元,将程序和数据
考点1
基本概念
备考讲义
封装其中,以提高软件的重用性、灵活性和扩展性。面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反。传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接收数据、处理数据并将数据传达给其他对象,因此它们都可以被看作一个小型的“机器”,即对象。
面向对象的特征是:
(1)抽象性,把现实世界中的某一类东西,提取出来,用程序代码表示。
(2)封装性,把过程和数据包围起来,对数据的访问只能通过已定义的界面。
(3)继承性,一种联结类的层次模型,对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),原始类称为新类的基类(父类)。派生类可以从它的父类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
(4)多态性,允许不同类的对象对同一消息做出响应。其优点是:可扩展性高。缺点是:编程的复杂度远高于面向过程,不了解面向对象而立即上手并基于它设计程序,极容易出现过度设计的问题,而且在一些扩展性要求低的场景使用面向对象设计会徒增编程难度,比如管理linux系统的shell脚本程序就不适合用面向对象去设计,面向过程反而更加适合。
2.对象与类(B)
(1)对象
对象是面向对象程序设计的基本元素,是将数据和对数据的操作封装起来的程序模块。每个对象都有各自的属性与方法。对象是通过类定义的数据结构实例。
(2)类
类是用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。
3.类的三大特性:继承性、封装性和多态性。(C)
(1)继承性
类与类之间可以继承属性。如果一个类A继承自另一个类B,则A称为B的子类,B称为A的父类。子类除了具有父类的全部属性和方法,还具有各自的属性和方法。继承的主要目的是实现方法的多态性和代码的可重用性。
(2)封装性
类将对象的共同属性和方法封装在内部,通过方法来修改和执行业务,对外提供修改数据和处理业务的方法,有助于实现模块化编程,有利于后期的修改和维护。
(3)多态性
多态是指方法的重载和方法的重写,在相同名称的方法下,根据不同的情况调用对应的方法,多态是为了解决现实生活中的情况的多样性问题,根据不同的条件,做出对应的动作。多态性有助于实现满足灵活多变的实际业务需求。
类与对象的联系
类是对象的抽象,对象是类的实例。
Python 中定义一个类通过使用 class 关键字来实现,其基本语法格式如下。
class 类名:
  多个(≥0)类属性……
  多个(≥0)类方法……
注意,无论是类属性还是类方法,对于类来说,它们都不是必需的,可以有也可以没有。另外,Python 类中属性和方法所在的位置是任意的,即它们之间并没有固定的前后次序。和变量名一样,类名本质上就是一个标识符,因此我们在给类起名字时,必须让其符合 Python 的语法。作为一名合格的程序员在给类起名字时,最好使用能代表该类功能的单词,例如用“Student”作为学生类的类名,甚至如果必要,可以使用多个单词组合而成,例如初学者定义的第一个类的类名可以是“TheFirstDemo”。
注意,如果由单词构成类名,建议每个单词的首字母大写,其他字母小写。给类起好名字之后,其后要跟有冒号,表示告诉 Python 解释器,下面要开始设计类的内部功能了,也就是编写类属性和类方法。其实,类属性指的就是包含在类中的变量;而类方法指的是包含在类中的函数。换句话说,类属性和类方法其实分别是包含类中的变量和函数的别称。需要注意的一点是,同属一个类的所有类属性和类方法,要保持统一的缩进格式,通常统一缩进 4 个空格。
4.属性、方法、属性(C)
(1)事件
事件是可以被对象识别的操作。事件有系统事件和用户事件两种,系统事件由系统激发,用户事件由用户激发。事件集是固定的,不能由用户创建。
(2)方法
方法就是事件发生时对象执行的操作。
(3)属性
对象的特性称为对象的属性,描述对象特性的具体数据称为属性值。
控件对象属性设置方法:
设置组件属性控制组件的各种状态,如:宽度、高度、颜色、位置等。设置的三种方法如下。
①创建对象后,使用关键字参数:fd=Button(root,fg=“red”,bg=“blue”)。
②创建对象后,使用字典索引方式:fd[“fg”]=“red”;fd[“bg”]=“blue”。
③创建对象后,使用config()方法:fd.config(fg=“red”,bg=“blue”)。
例1 Python面向对象的特征主要有四个,分别是抽象、封装、继承和________。
【答案】 多态
【试题分析】 本题主要考查面向对象程序设计的基本特征,做好本题需要识记面向对象程序设计特征的四个方面。
【解析】 Python是面向对象的编程语言,同时也是一门解释型编程语言。Python面向对象的特征主要有四个,分别是抽象、封装、继承和多态。
变式训练1 下列创建类中,方法正确的是(   )
A.Class food(): B.Class Food():
C.class Food() D.class Food():
D
【试题分析】 本题主要考查Python中面向对象程序设计中类的知识,做好本题需要识记创建类的方法。
【解析】 创建类用class关键字,与类名中间隔一个空格,后面添加括号和冒号。故选D。
变式训练2 关于面向过程和面向对象,下列说法错误的是
(   )
A.面向过程和面向对象都是解决问题的一种思路
B.面向过程是基于面向对象的
C.面向过程强调的是解决问题的步骤
D.面向对象强调的是解决问题的对象
B
【试题分析】 本题主要考查Python中面向对象程序设计和面向过程程序设计的关系,做好本题需要理解两者之间的联系和区别。
【解析】 面向对象是基于面向过程的,面向对象的选择性更大,重视的是结果而不是过程,面向对象是面向过程的优化。故选B。
变式训练3 关于类和对象的关系,下列描述正确的是(   )
A.类是面向对象的核心
B.类是现实中事物的个体
C.对象是根据类创建的,并且一个类只能对应一个对象
D.对象描述的是现实的个体,它是类的实例
D
【试题分析】 本题主要考查程序设计语言中类和对象的关系,要理解这两者之间的包含关系。
【解析】 类和对象之间是抽象与具体的关系。类是一个模板,是对一类事物的抽象描述;对象用于表示现实中该事物的个体。类是在对象之上的抽象,对象则是类的具体化,是类的实例。故选D。
变式训练4 下列属于定义类的关键字的是(   )
A.def B.lambda
C.class D.del
C
【试题分析】 本题主要考查Python中关键字的含义,做好本题需要识记Python中一些常用关键字的意思和适用场合。
【解析】 题目中所列出的四个选项均为常用关键字,def:Python使用def开始函数定义,紧接着是函数名,括号内部为函数的参数,内部为函数的具体功能实现代码;lambda:是一种匿名函数,通常用于简化代码和功能简单的函数定义;class:关键字class用来定义一个类,后面紧跟类名,类名通常首字母大写;del:在Python中,del是一个关键字,用于删除对象或变量。它可以用于删除单个对象、元素或属性,以及从列表、字典或集合中删除元素。故选C。
变式训练5 关于面向对象的继承,以下选项中描述正确的是
(   )
A.继承是指一个对象具有另一个对象的性质
B.继承是指一组对象所具有的相似性质
C.继承是指类之间共享属性的操作的机制
D.继承是指各对象之间的共同性质
C
【试题分析】 本题主要考查面向对象中的继承性的理解,做好本题需要识记面向对象程序设计特征的四个方面并理解。
【解析】 类与类之间可以继承属性。如果一个类A继承自另一个类B,则A称为B的子类,B称为A的父类。子类除了具有父类的全部属性和方法,还具有各自的属性和方法。继承的主要目的是实现方法的多态性和代码的可重用性。故选C。
考点2
Tkinter库
1.Tkinter库的简介和使用
(1)Tkinter是Python的标准GUI库。它基于Tk工具包创建,该工具包最初是为工具命令语言(Tool Command Language,TCl)设计 的。Tk普及后,被移植到很多其他的脚本语言中,包括Perl,Ruby和Python。结合Tk的可移植性与灵活性,以及与系统语言功能集成的脚本语言的简洁性,可以快速开发GUI应用程序。
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
Tkinter的优点是简单易用,与Python结合度好。Tkinter在Python 3.x下默认集成,不需要额外安装。因此,想要使用Tkinter进行GUI编程,可直接使用import语句导入tkinter模块。
import tkinter
模块导入的作用:
①代码重用:一段代码需要用到两次以上的时候,就需要写一个函数。
②避免变量名冲突:每个模块都将变量名封装进了自己包含的软件包,这样可以避免变量名的冲突,除非使用精确导入。
(2)在GUI应用程序中,首先需要一个顶层窗口对象,在顶层窗口对象上可以包括所有的小窗口对象,如标签、按钮、列表框等,也就是说顶层窗口是我们放置其他窗口或控件的基础。然后在顶层窗口对象上设置控件,通常这些控件会有一些相应的行为,如鼠标单击、鼠标移动等,这些称为事件;而程序会根据这些事件采取相应的反应,称为回调,这个过程称为事件驱动。最后,所有控件和窗口创建完毕后进入主事件循环。
创建一个GUI应用程序需要以下5个主要步骤。
①导入tkinter模块(import tkinter)。
②创建一个顶层窗口对象(调用Tk()函数),用于容纳整个GUI应用。
③在顶层窗口对象上构建所有的GUI控件。
④通过底层应用代码将这些GUI控件连接起来。
⑤进入主事件循环(调用mainloop()函数)。
(3)窗体实例:创建一个名为“测试程序”的窗体。
实例代码:
import tkinter    #导入tkinter模块
root=tkinter.Tk()  #创建一个顶层窗体对象root,用于容
纳整个GUI应用
root.title(“测试程序”) #设置窗体标题
root.geometry(“400x300”) #设置窗体大小(x为英文字母)
label=tkinter.Label(root,text='Hello World',fg='red') #添加一个Label控件,用于显示文本
label.pack()  #调用Label控件的pack()方法
root.mainloop()  #进入主事件循环
运行后窗体效果:
图14—1 测试程序窗体
实例说明:
Tk()是Tkinter库中的函数,用于创建顶层窗口对象,创建完对象后将其赋值给root变量,geometry()方法中的乘号是小写英文字母x。接下来创建控件时,可用该变量指定控件是创建在该顶层窗口对象中的。然后利用Label控件创建一个标签(用于显示“Hello World”),并调用Label控件的pack()方法显示标签。root.mainloop()通常是程序的最后一行代码,执行后程序进入主事件循环。
(4)Tkinter的常用控件(考纲中要求Tkinter库中的控件)
表14—1 常用控件
控 件 描 述
1.Label 标签控件,可以显示文本和图像
2.Button 按钮控件,在程序中显示按钮
3.Checkbutton 多选框控件,用于在程序中提供多项选择框
4.Entry 输入控件,用于显示简单的文本内容
5.Listbox 列表框控件,用来显示一个字符串列表给用户
6.Radiobutton 单选按钮控件,显示一个单选的按钮状态
7.Text 文本控件,用于显示多行文本
8.Message 消息控件,用来显示多行文本,与Label类似
2.tkinter窗体对象的常用属性
窗口或窗体也称为框架(Frame),是屏幕上的一块矩形区域,多用来作为容器布局窗体。窗口中可包含标签、菜单、按钮等其他控件,其运行之后可移动和缩放。
表14—2 窗体的常用属性
属 性 描 述
title 设置窗口标题
geometry 设置窗口大小
resizable 设置窗口是否可以变化长和宽
tkinter的Tk()对象有一个keys()方法,调用该方法返回根窗体对象的所有资源名称组成的列表。
root.keys()
['bd','borderwidth','class','menu','relief','screen','use','background','bg','colormap','container','cursor','height','highlightbackground','highlightcolor','highlightthickness','padx','pady','takefocus','visual','width']
图14—2 资源列表
列表中列出了一些资源名称,通过它们可以对根窗体的相关属性进行设置,其语法格式如下。
窗体对象名[“属性名”]=属性值
(1)tkinter窗体对象的常用方法
①设置窗体标题title()方法
默认根窗体的标题文字为“tk”,通过调用窗体对象的title()方法可修改根窗体标题文字,调用格式如下。
窗体对象名.title(“标题字符串”)
“标题字符串”是显示在窗口标题栏上的标题文字。如果省略标题字符串参数,则标题文字为“tk”。
②设置窗体大小和显示位置的geometry()方法
使用窗体的geometry()方法对其大小和显示位置进行设置,调用格式如下。
窗体对象名.geometry(“宽度x高度+|-x坐标+|-y坐标”)
例如,下面的语句设置主窗体的宽为450,高为350,把根窗体定位在桌面左上角。
root.geometry(“450×350+0+0”)
③设置窗体是否可以改变的resizable()方法
通过调用根窗体对象的resizable()方法,可以设置窗口的宽度和高度是否可以调整,调用格式如下。
窗体对象名.resizable(width=True,height=True)
④调用根窗体的主事件循环的mainloop()方法
调用根窗体对象的主事件mainloop()方法来实现,调用格式如下。
窗体对象名.mainloop()
(2)在根窗体中添加tkinter控件对象
①调用相应控件类的构造方法创建控件对象。
②对该控件对象调用某种布局方法。
创建控件对象的语法格式和对该控件对象调用布局方法的语法格式如下。
控件对象名=控件类名(父容器对象名,属性1=值1,属性2=值2,…)
控件对象名.布局方法名()
例如,在根窗体中添加两个Label控件,代码如下。
label1=Label(root) # 在根窗体中添加一个标签控件label1
label2=Label(root,text='你好,世界!') # 添加label2控件,并设置label2中显示的文本
1.Label控件(C)
Label控件是用于在界面上输出描述信息的标签,可以显示文本和图像。
备考讲义
属 性 描 述
text 指定要显示的文本
background或bg 背景颜色
foreground或fg 前景颜色
bd 外围3D边界的宽度
font 设置字体
width 设置标签的宽度
height 设置标签的高度
relief 边框外观
表14—3 Label控件的常用属性
创建Label控件对象的语法格式如下。
标签控件对象名=tkinter.Label(根窗体名,text=字符串,其他参数列表)
Label控件实例:在根窗体中添加两个Label控件对象,构成一个欢迎窗口。
实例代码:
from tkinter import *
root=Tk()
root.title(“欢迎”) # 设置窗体标题
root.geometry(“350x250-0-100”) # 设置根窗体的大小和显示位置,显示在右下方
root['bg']='lightyellow' # 设置背景颜色为浅黄色
label1=Label(root) # 在根窗体中添加一个标签控件label1对象
label1['text']='Hello,world!' # 设置标签控件label1中显示的文本
label2=Label(root,text='你好,世界!',fg=“red”,font=(“隶书 20”))
# 添加label2控件对象,并设置label2中显示的文本
label1.pack() # 调用pack()布局方法
label2.pack()
root.mainloop()
运行后窗体效果:
图14—3 Label控件实例运行效果
2.Button控件(C)
Button控件是Tkinter最常用的控件之一,其绝大多数属性与Label控件一致,但是Button控件有一个Label控件实现不了的功能,即通过Button控件可以方便地与用户进行交互。Button控件有一个command属性,用于指定一个函数或方法,当用户单击按钮时,Tkinter就会自动调用该函数或方法。
创建Button控件的语法格式如下。
Button控件对象名=tkinter.Button(根窗体名,text=字符串,command=函数名,…)
设置参数command时,也可以利用匿名函数来调用函数并传递参数,其语法格式如下。
command=lambda:函数名(参数列表)
Button控件实例:在根窗体中添加一个Button控件对象,单击按钮,文本发生变化。
实例代码:
from tkinter import *
root=Tk()
root.title(“按钮实例”)
root.geometry(“350×250-700-600”)
def changeText():
if b['text']=='text':
v.set('change')
print('change')
else:
v.set('text')
print('text')
v=StringVar()
b=Button(root,textvariable=v,command=changeText)
v.set('text')
b.pack()
root.mainloop()
运行后窗体效果:
图14—4 Button控件实例运行效果
说明:将变量v与Button绑定,当v值变化时,Button显示的文本也随之变化。
3.Checkbutton 控件(C)
Checkbutton控件用于实现选项的复选功能。Checkbutton控件对象通过调用tkinter模块的Checkbutton控件类构造方法创建,其语法格式如下。
cb=Checkbutton(root,参数列表)
表14—4 Checkbutton控件常用属性
属 性 描 述
variable 复选框索引变量,通过变量的值确定哪些复选框被选中;每个复选框使用不同的变量,使复选框之间相互独立
onvalue 复选框选中(有效)时变量的值
offvalue 复选框未选中(无效)时变量的值
command 复选框选中时执行的命令(函数)
Checkbutton控件实例:通过回调函数改变 Checkbutton 的显示文本 text 的值。
实例代码:
from tkinter import *
def callCheckbutton(  ):
  v.set('勾选后文本') #改变 v 的值,即改变 Checkbutton 的显示值
root=Tk()
root.geometry(“350×250”)
v=StringVar()
v.set('原始文本') #绑定 v 到 Checkbutton 的属性 textvariable
Checkbutton(root,text='原始文本',font=(“隶书\\ 20”),textvariable=v,command=callCheckbutton).pack()
root.mainloop()
运行后窗体效果:
图14—5 Checkbutton控件实例运行效果
4.Entry控件(C)
Entry控件就是输入框,用来输入单行内容,可以方便地向程序传递用户参数。获取输入框的内容可以使用Entry控件的get()方法。
表14—5 Entry控件常用属性
属 性 描 述
exportselection 默认情况下,如果在输入框中选中文本会复制到粘贴板,如果要忽略这个功能,可以设置为 exportselection=0
selectbackground 选中文字时的背景颜色
selectforeground 选中文字时的前景色
属 性 描 述
show 指定文本框内容以何种样式的字符显示,比如密码可以将值设为 show=“*”
textvariable 输入框内值,也称动态字符串,使用StringVar() 对象来设置,而 text 为静态字符串对象
xscrollcommand 设置输入框内容滚动条,当输入的内容大于输入框的宽度时使用
Tkinter中常用动态数据类型:
StringVar()、BooleanVar()、DoubleVar()、IntVar()分别代表字符串、布尔值、浮点型、整型。
文本框控件分为单行文本框(Entry)和多行文本框(Text),它们都用于输入和编辑文本,所不同的是,前者只能输入单行文本,不接受换行符,后者则允许输入多行文本。
Entry控件对象通过调用Entry类的构造方法来创建,其语法格式如下。
Entry控件对象名=tkinter.Entry(根窗体名,参数列表)
如果窗口中有多个文本框,调用focus()方法将焦点移到指定的文本框中,调用格式如下。
文本框对象.focus()
Entry控件实例:使用Entry控件设计一个搜索框窗体,能搜索输入的内容,同时能清空输入内容。
实例代码:
import tkinter
root=tkinter.Tk() #初始化一个根窗体
root.title(“搜索框”) #设置根窗体标题
root.geometry(“300x300”) #设置根窗体的大小,中间用小写x表示“*”
lab1=tkinter.Label(root,text=“搜索框:”,font=(“宋体 12 bold”))
lab1.grid(row=0,column=0,pady=10,padx=3)
def pa(event):
  s.set("")
def pb(event):
  if ent1.get()==“请输入搜索的内容”:
  lab2.config(text=“搜索内容不能为空,请重新输入要搜索的内容!”)
  elif ent1.get().strip("“)==”":
  lab2.config(text=“搜索内容不能为空,请重新输入要搜索的内容!”)
  elif ent1.get()!=“请输入搜索的内容” and ent1.get()!="":
  lab2.config(text=“搜索的内容是:”+ent1.get()+“请稍等!”)

def pc():
  ent1.focus()
  s.set("")
  lab2.config(text="")
s=tkinter.StringVar()
s.set(“请输入搜索的内容”)
ent1=tkinter.Entry(root,textvariable=s)
ent1.grid(row=0,column=1)
ent1.bind(“”,pa)
b1=tkinter.Button(root,text=“搜索按钮”)
b1.grid(row=1,column=0)
b1.bind(“”,pb)
b2=tkinter.Button(root,text=“清空按钮”,command=pc)
b2.grid(row=1,column=1)
lab2=tkinter.Label(root,text="")
lab2.place(x=5,y=90)
root.mainloop()
运行后窗体效果:
图14—6 Entry控件实例运行效果
点击“清空按钮”后,清空“搜索框”内容,调用focus()方法将焦点移到的文本框中。
图14—7 清空搜索框内容
5.Listbox控件(C)
列表框控件显示多行文本,用户可以选中一行或者多行。所有的文本只能使用一种字体,不能混合使用多种字体。Listbox控件可以包含一个或多个文本项(text item),可以设置为单选或多选,其语法格式如下。
Li=Listbox (root,参数列表)
Listbox控件常用属性
属 性 描 述
activestyle 被选中文本的样式:
underline: 下划线
dotbox:点划线框
none: 没有任何的样式
background或bg 背景颜色。默认是系统指定颜色
borderwidth或bd 边框宽度。一般是1~2个像素值
属 性 描 述
cursor 当鼠标移动经过列表框的时候,显示的光标样式
disabledforeground 列表框被禁止使用的时候的背景颜色
font 列表框中文字的字体。只能选择一种字体显示
height 设置列表框的高度,默认值是10
highlightbackground 当列表框失去焦点的时候,边框的高亮颜色
属 性 描 述
highlightcolor 当列表框获得焦点的时候,边框的高亮颜色
selectbackground 选中的条目背景颜色
selectborderwidth 选中的条目,会用一个虚线的矩形框住。此参数定义矩形边框的宽度。默认值是1
selectforeground 选中条目的文本颜色
selectmode 选择模式:
MULTIPLE:多选
BROWSE:通过鼠标的移动选择
SINGLE:只能选一行。鼠标不能拖动选择
EXTENDED:shift和ctrl配合使用
state 标签的状态,包括NORMAL和DISABLED
width 设置列表框的宽度。默认值为20
Listbox控件实例:利用Listbox控件设计一下窗体,用于显示项目列表。
实例代码:
import tkinter
root=tkinter.Tk() #初始化一个根窗体
root.title(“Listbox列表框用于显示项目列表”) #设置根窗体标题
root.geometry(“400x300”) #设置根窗体的大小,中间用小写x表示“*”
tkinter.Label(root,text=“多选,你会几种编程语言”).pack()
Li1=tkinter.Listbox(root,selectmode=tkinter.MULTIPLE)
for i in [“Python”,“c++”,“c”,“java”]:
  Li1.insert(tkinter.END,i) #END表示每插入一个都是在最后一个位置
Li1.pack()
root.mainloop()
运行后窗体效果:
图14—8 Listbox控件实例运行效果
6.Radiobutton(C)
单选按钮控件(Radiobutton)用于实现选择功能,它向用户显示多个选项,用户只能从中选择一个。
表14—7 Radiobutton控件常用属性
属 性 描 述
variable 单选框索引变量,通过变量的值确定哪个单选框被选中,一组单选框使用同一个索引变量
value 单选框选中时变量的值
command 单选框选中时执行的命令(函数)
Radiobutton控件对象调用tkinter模块的Radiobutton控件类构造方法创建,语法格式如下。
Radiobutton控件对象名=tkinter.Radiobutton(根窗体名,参数列表)
Radiobutton控件实例:用Label控件显示一行文本,用一组Radiobutton控件设置文本的字号大小,用另一组Radiobutton控件设置文本的颜色。
实例代码:
from tkinter import *
def setFontSize():
  lb[“font”]=(“黑体”,fontsize.get())
def setColor():
  lb[“fg”]=color.get()
root=Tk(className='单选按钮控件示例')
root.geometry(“400x220+200+200”)
fm=Frame(root)
fm.pack(pady=10,side=BOTTOM)
lb=Label(fm,text=“Python GUI设计”,font=(“宋体”,18),fg=“red”)
lb.pack()
lf1=LabelFrame(root,text=“字号”,relief=GROOVE,bd=3)
lf1.pack(padx=10,pady=20,side='left')
fontsize=IntVar()
fontsize.set(16)
rb11=Radiobutton(lf1,text=“小”,\\
variable=fontsize,value=16,command=setFontSize)
rb12=Radiobutton(lf1,text=“中”,\\
variable=fontsize,value=20,command=setFontSize)
rb13=Radiobutton(lf1,text=“大”,\\
variable=fontsize,value=24,command=setFontSize)
rb11.pack(padx=10,ipadx=5)
rb12.pack(padx=10,ipadx=5)
rb13.pack(padx=10,ipadx=5)
lf2=LabelFrame(root,text=“颜色”,relief=GROOVE,bd=3)
lf2.pack(padx=10,pady=20,side='right')
color=StringVar()
color.set(“red”)
rb21=Radiobutton(lf2,text=“红”,\\
variable=color,value=“red”,command=setColor)
rb22=Radiobutton(lf2,text=“绿”,\\
variable=color,value=“green”,command=setColor)
rb23=Radiobutton(lf2,text=“蓝”,\\
variable=color,value=“blue”,command=setColor)
rb21.pack(side=LEFT,padx=10,ipadx=5)
rb22.pack(side=LEFT,padx=10,ipadx=5)
rb23.pack(side=LEFT,padx=10,ipadx=5)
root.mainloop()
运行后窗体效果:
图14—9 Radiobutton控件实例运行效果
7.Text控件(C)
Text 文本控件是 Tkinter 中经常使用的控件,与 Entry 控件相比,Text 控件用于显示和编辑多行文本,而 Entry 控件则适合处理单行文本。
其语法格式如下:
txt=Text(root,参数列表)
表14—8 Text文本控件的常用属性
属 性 描 述
autoseparators 默认为 True,表示执行撤销操作时是否自动插入一个分隔符(其作用是用于分隔操作记录)
exportselection 默认值为 True,表示被选中的文本是否可以被复制到剪切板,若是 False 则表示不允许
insertbackground 设置插入光标的颜色,默认为 BLACK
insertborderwidth 设置插入光标的边框宽度,默认值为 0
属 性 描 述
selectbackground 指定被选中文本的框的背景颜色,默认由系统决定
selectborderwidth 指定被选中文本框的宽度,默认值是0
selectforeground 指定被选中文本的字体颜色,默认值由系统指定
undo 该参数默认为 False,表示关闭 Text 控件的“撤销”功能,若为 True 则表示开启
Text控件实例:创建Text控件,并向 Text 中添加两行文本。
实例代码:
from tkinter import *
root=Tk()
root.title(“Text文本控件实例”) #设置根窗体标题
t=Text(root)
t.insert(1.0,'0123456789') # 向第一行,第一列添加文本 0123456789
t.insert('2.end','\\n')
t.insert(2.5,'ABCDEFGHIJ') # 向第一行第一列添加文本 ABCDEFGHIJ
t.pack()
root.mainloop()
运行后窗体效果:
图14—10 Text控件实例运行效果
可以在Text控件内输入文本,可以使用 Ctrl+C/V 向Text 内添加剪切板上的内容(文本),不接受 Ctrl+Z 执行操作。
8.Message控件(C)
Message消息控件是Label 控件的变体,用于显示多行文本消息。Message 控件能够自动换行,并调整文本的尺寸使其适应给定的尺寸。Message 控件用于显示简单的文本消息,通常可以使用 Label 来代替。如果希望使用多种字体来显示文本,那么应该使用 Text控件。
Message 控件的语法结构如下。
m=Message (root,option,…)
Message(消息)控件的常用属性
属 性 描 述
anchor 如果空间大于所需时,控制消息的位置,默认是CENTER
aspect 控件宽度与高度比,默认是150%
bd 边界宽度,默认是两个像素
Background或bg 背景色彩
属 性 描 述
cursor 当鼠标光标移至按钮上时的形状
Foreground或fg 前景色彩
font 字形、字形样式与大小
height 高,单位是字符高
justify 当有多行文字时,最后一行文字的对齐方式,取值为LEFT/CENTER/RIGHT(靠左/居中/靠右),默认是居中对齐
属 性 描 述
padx/pady Message 文字与边框的间距,单位是像素
relief 可由此控制文字外框,默认是relief=FLAT
text Message 内容,如果有“\\n”则可以输入当行文字
textvariable 文字变量
width 宽,单位是字符宽
wraplength 文本在多少宽度后换行,单位是像素
例2 Message消息控件实例:利用Message消息控件,打印如下图形,窗体大小400×300。
运行后窗体效果如下图所示:
实例代码:
from tkinter import *
import time
Color=['yellow','red','blue','green','purple']
root=Tk()
root.geometry(“400×300”)
root.title(“Message(消息)控件实例”)
for i in range(10):
Message(root,text='★'*i,aspect=400,fg=Color[i%5]).pack()
root.mainloop()
变式训练6 在Button控件中,当按下鼠标时,背景色用下列哪
种属性设置(   )
A.fg B.activebackground
C.bg D.activeforeground
B
【试题分析】 本题主要考查Python中面向对象程序设计中Button控件的各种属性,做好本题需要识记Button控件各种属性的意义和使用方法。
【解析】 在Button控件各种属性中fg表示按钮上文字或者位图的颜色,也可以使用foreground;activebackground表示按钮按下时背景颜色,默认是系统指定的颜色;bg表示按钮的背景颜色,默认是系统指定颜色,也可以使用background;activeforeground 表示按钮按下时前景颜色,默认是系统指定的颜色。故选B。
变式训练7 在Checkbutton控件中,下列属性用来表示光标形
状设置的是(   )
A.height B.cursor
C.image D.bitmap
B
【试题分析】 本题主要考查Python中面向对象程序设计中Checkbutton控件的各种属性,做好本题需要识记Checkbutton控件各种属性的意义和使用方法。
【解析】 在Checkbutton控件各种属性中height表示多选按钮的高度,默认为 1行;cursor表示光标的形状设定,如arrow,circle,cross,plus 等;image表示背景图片,在按钮上显示图形图像;bitmap也表示背景图片,在按钮上显示单色图像。故选B。
变式训练8 在Entry控件中,下列属性用来表示文本框高亮边
框颜色,当文本框获得焦点时显示的是(   )
A.font B.relief
C.highlightcolor D.justify
C
【试题分析】 本题主要考查Python中面向对象程序设计中Entry控件的各种属性,做好本题需要识记Entry控件各种属性的意义和使用方法。
【解析】 在Entry控件各种属性中,font表示文本字体;relief表示边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE,默认为 FLAT;highlightcolor表示文本框高亮边框颜色,当文本框获取焦点时显示;justify表示显示多行文本的时候,设置不同行之间的对齐方式,可选项包括LEFT,RIGHT,CENTER。故选C。
变式训练9 在Label控件中,用来设置文本内容的属性是
(   )
A.font B.anchor
C.width D.text
D
【试题分析】 本题主要考查Python中面向对象程序设计中Label控件的各种属性,做好本题需要识记Label控件各种属性的意义和使用方法。
【解析】 在Label控件各种属性中,font表示可选择字形、样式与大小;anchor表示如果空间大于所需时,控制标签位置,默认是CENTER(居中);width表示标签的宽度,单位是字符;text表示标签内容,如果有\\n则可以输入多行文字。故选D。
变式训练10 在Listbox控件中,________方法表示返回列表框
的行数。(   )
A.size( ) B.index( )
C.see( ) D.get
A
【试题分析】 本题主要考查Python中面向对象程序设计中Listbox控件的各种方法,做好本题需要识记Listbox控件各种方法的意义和使用方法。
【解析】 在Listbox控件各种方法中,size()表示返回列表框的条目总数;index()表示返回index指定的索引值。index可以是ACTIVE,也可以是ANCHOR,还可以是坐标值“@x,y”;see()表示保证index指定的项值在列表框中可见;get()表示获得1个或者多个条目。故选A。
变式训练11 在Radiobutton控件中,________属性用来表示小
部件的水平填充功能。(   )
A.variable B.value
C.padx D.pady
C
【试题分析】 本题主要考查Python中面向对象程序设计中Radiobutton控件的各种属性,做好本题需要识记Radiobutton控件各种属性的意义和使用方法。
【解析】 在Radiobutton控件各种属性中,variable表示关联单选框执行的函数;value表示用于多个单选框值的区别;padx表示按钮在x轴方向上的内边距(padding),默认为 1 像素;pady表示按钮在y轴方向上的内边距(padding),默认为 1 像素。故选C。
变式训练12 在Text控件中,________属性用来表示当具有焦
点时,焦点的颜色突出显示。(   )
A.height B.font
C.highlightcolor D.state
C
【试题分析】 本题主要考查Python中面向对象程序设计中Text控件的各种属性,做好本题需要识记Text控件各种属性的意义和使用方法。
【解析】 在Text控件各种属性中,height表示文本控件的高度,默认是24行;font表示设置字体类型与大小;highlightcolor表示文本控件获得输入焦点时的边框颜色;state表示文本框状态选项,状态有DISABLED/NORMAL,DISABLED状态文本框无法输入,NORMAL状态可以正常输入。故选C。
变式训练13 在Message控件中,________属性用来表示对齐多
行文本。(   )
A.insertofftime B.image
C.justify D.insertontime
C
【试题分析】 本题主要考查Python中面向对象程序设计中Message控件的各种属性,做好本题需要识记Message控件各种属性的意义和使用方法。
【解析】 在Message控件各种属性中,insertofftime表示光标不显示的时间,insertontime表示光标显示的时间;textvariable关联一个 Tkinter variable 对象,通常为 StringVar 对象。控件文本将在该对象改变时跟着改变;justify指示多行文本如何对齐。可选项为 LEFT,RIGHT,CENTER,默认为 LEFT。注意该属性指示文字对齐方式,如果要指定文字在控件内的位置,需要使用 anchor 属性。故选C。
变式训练14 在Entry控件中,如果需要用暗码显示,实现对输
入密码的保护,可以通过对________属性进行设置。(   )
A.width B.state
C.font D.show
D
【试题分析】 本题主要考查Python中面向对象程序设计中Entry控件的各种属性,做好本题需要识记Entry控件各种属性的意义和使用方法。
【解析】 在Entry控件各种属性中,width 表示文本框的高度;state表示本框的状态,默认为state=NORMAL,文本框状态,分为只读和可写,值为normal/disabled;font表示文本字体;show指定文本框内容显示为字符,值随意设置,满足字符即可。如密码可以将值设为 show="*"。故选D。
变式训练15 运用Python自带的tkinter库,设计GUI界面,通过勾选复框按钮改变文本内容:勾选前显示“原始文本”,勾选后显示“勾选后文本”。程序运行后效果如下图所示。
(参考代码)
from tkinter import *
def callCheckbutton():
#改变 v 的值,即改变 Checkbutton 的显示值
  if che1_state.get()==0:
    v.set('原始文本')
  else:
    v.set('勾选后文本')
root=Tk()
root.geometry("350x250")
v=StringVar()
v.set('原始文本')
che1_state=IntVar()
#绑定 v 到 Checkbutton 的属性 textvariable
che1=Checkbutton(root,text='原始文本',font=("隶书\\20"),textvariable=v,variable=che1_state,command=callCheckbutton).pack()
root.mainloop()
【试题分析】 本题主要考查Python中面向对象程序设计中Checkbutton控件的使用,特别是使用到StringVar()、IntVar(),都是tkinter中帮助存储相对应的值的存储器,帮助输出在GUI界面中。当需要在GUI中显示需要输出的值时,可以将输出的数存储在IntVar()和StringVar()当中,调用set()内置函数配置在GUI界面中。
变式训练16 运用Python自带的tkinter库,设计GUI库,制作一个名称为“计算”的按钮,实现输入圆的半径,点击“计算”按钮,计算出圆的面积(结果保留两位小数),并将圆面积显示在对应的控件中。窗体运行效果如图所示。请在合适的位置将代码补充完整。
import tkinter as tk
import math
root=tk.Tk()
root.title(“计算圆的面积:”)
root.geometry(“260x120”)
tk.Label(root,text=“圆的半径:”).grid(row=0)
tk.Label(root,text=“圆的面积:”).grid(row=1)
tex1=tk.Entry(root)
tex1.grid(row=0,column=1)
tex2=tk.Entry(root)
tex2.grid(row=1,column=1)
#*******************GUI*******************#
代码补充处
#*******************End*******************#
tk.Button(root,text=“退出”,command=root.destroy,width=10).grid(row=2,
column=1,padx=5,pady=5)
root.mainloop()
【解析】 (参考代码)
 def pr():
   tex2.delete(0,tk.END)
   r=eval(tex1.get())
   s=math.pi*r*r
   tex2.insert(10,round(s,2))
tk.Button(root,text="计算",command=pr,width=10).grid(row=2,column=0, padx=5,pady=5)
变式训练17 运用Python自带的tkinter库,设计GUI界面,采用Listbox显示各项体育运动,用户可以选择一项自己不喜欢的体育运动,单击“删除”按钮,删除选项。请按顺序分别给Listbox中添加“篮球、足球、乒乓球、羽毛球”四个选项。窗体运行后效果如图所示。在适当的位置将程序补充完整。
from tkinter import *
root=Tk()
root.title(“运动项目”)
root.geometry(“250x280”)
LABEL1=Label(root,text=“请删除您不喜欢的运动项目”)
LABEL1.pack()
LB=Listbox(root)
LB.pack()
#*******************GUI*******************#
代码补充处
#*******************End*******************#
Button1=Button(root,text=“删除”,command=lambda x=LB: x.delete(ACTIVE))
Button1.pack()
mainloop()
【解析】 (参考代码)
for item in ["篮球","足球","乒乓球","羽毛球"]:
  LB.insert(END,item)
1.事件与事件响应(仅限于鼠标事件和键盘事件)(C)
(1)事件的概念
①事件:事件(Event)就是发生在该对象上的事情。
考点3
面向对象程序设计
备考讲义
②事件过程:当在对象上发生了某个事件后,程序需要做出反应,必须想办法处理这个事件,而处理的步骤就是事件过程(Event Procedure)。
③事件驱动:程序执行后,会等待某个事件的发生,当事件发生后再去执行处理此事件的事件过程。
(2)事件类型type
Python的事件类型type包括鼠标事件、键盘事件和窗体事件(考纲不做要求)。
表14—10 Python的事件类型type ——鼠标事件
type 含义
Button 当用户单击鼠标按键或滚轮滚动时触发该事件。Detail(指具体的按钮)部分指定具体哪个按键:鼠标左键, 鼠标中键,鼠标右键
type 含义
ButtonRelease 当用户释放鼠标按键时触发该事件。在大多数情况
下,ButtonRelease事件比Button事件更好用,因为如果用户不小心按下鼠标,用户可以将鼠标指针移出组件再释放鼠标按键,从而避免不小心触发事件
Motion 当鼠标指针在组件内移动的整个过程均触发该事件
type 含义
Enter 当鼠标指针进入组件的时候触发该事件。注意:不是指用户按下Enter键
Leave 当鼠标指针离开组件的时候触发该事件
MouseWheel 当鼠标滚轮滚动的时候触发该事件。目前该事件仅支持Windows和Mac系统
表14—11 Python的事件类型type ——键盘事件
type 含义
KeyPress 当用户按下键盘按键的时候触发该事件。Detail可以指定具体的按键,例如表示当大写字母H被按下的时候触发该事件。KeyPress可以简写为Key
KeyRelease 当用户释放键盘按键的时候触发该事件
①鼠标常用事件:
a.:单击鼠标左键。
b.:释放鼠标左键。
c.:按住鼠标左键移动。
d.:双击鼠标左键。
e.:转动鼠标滚轮。
f.:光标进入控件。
g.:光标离开控件。
②键盘常用事件:
a.:按下键盘任意键。
b.:按下字母键和数字键。
c.:按下Enter键。
d.:按下空格键。
e.:按下方向键。
f.~:按下功能键。
g.等:按下组合键,键名之间用加号连接。
(3)事件处理程序
定义事件处理函数的一般格式如下。
def 函数名(event):
函数体
(4)事件绑定到特定控件对象
把事件处理函数与窗口或窗口中的某个控件对象绑定,通过调用该控件对象的bind()方法来实现绑定。其调用格式如下:
控件对象名.bind(事件名,事件处理函数名)
鼠标单击事件应用实例:单击鼠标左键,在单击位置显示单击位置的坐标。
实例代码:
from tkinter import*
def click(event): # 定义事件处理程序,输出鼠标位置
  print(“鼠标当前位置是{0},{1}”.format(event.x,event.y)) # 在单击位置显示坐标值
# 调试窗口输出鼠标单击位置的坐标
def keyPress(event): # 处理键盘事件,输出按下的字符
  print(“按下了{0}”.format(repr(event.char)))
# 文本框获得焦点后,按键的字符在调试窗口显示
root=Tk()
root.title(“事件处理示例”)
root.geometry('300x200')
root.title(“鼠标、键盘事件示例”)
root.bind(“”,click) # 窗口绑定鼠标单击事件,执行事件处理程序click()方法
entry=Entry(root) # 添加文本框
entry.focus()
entry.bind(“”,keyPress) # 文本框绑定键盘事件,执行键盘处理程序keyPress()方法
entry.pack() # 按pack方式显示文本框对象entry
root.mainloop()
运行后窗体效果:
图14—11 事件绑定实例运行效果
2.控件布局(C)
控件在界面中的布局实质上就是将界面划分好,然后在不同位置放置不同或相同控件的过程。共有三种的布局方式,分别为pack布局、place布局和grid布局。三种不同的布局方式中,place布局可以与grid布局共同使用一个主窗口,但在一个主窗口中不能混合使用pack布局和grid布局。
(1)pack布局:pack布局和控件的先后顺序是相关的,一般先使用的控件放在上方,然后依次向下排,它会给控件一个自认为合适的位置和大小,这是默认方式。
pack布局方式通过调用pack()方法实现,其具体调用格式如下。
控件对象名.pack(side=值1,fill=值2,expand=值3,ipadx=值4,ipady=值5,padx=值6,pady=值7,anchor=值8)
相关属性参数如下:
①Side:停靠方向具体参数作用:left(左),right(右),top(上),bottom(下)。
②Fill:填充具体参数作用:X(水平方向填充),Y(竖直方向填充),BOTH(水平和竖直方向填充),NONE(不填充)。
③Expand:设置True,将随主窗体的大小变化,设置False,将不随主窗体的大小变化。
④ipadx和ipady:设置控件在水平方向和垂直方向的内边距间隙。
⑤padx和pady:设置控件在水平方向和垂直方向的外边距间隙。
⑥anchor(锚点):设置控件的对齐方式。
实例:利用pack布局设置控件之间的间隙大小。
实例代码:
from tkinter import *
root=Tk()
root.geometry('250x200+0+0')
# 下面创建3个Label,分别使用不同的fill属性,采用水平放置
lf=LabelFrame(root,text='pack1',bg='red') # 创建一个LabelFrame,居左放置
lf.pack(side='left',ipadx=30,anchor='n') # 设置内边距间隙ipadx属性为30,设置控件在上北
Label(lf,text='inside',bg='yellow').pack(expand=1, side='left') # 在父容器lf中创建Label控件
# 在父容器root中创建两个Label控件
lb1=Label(root,text='pack2',bg='gray').pack(fill='both', expand=1,side='left',padx=20)
lb2=Label(root,text='pack3',bg='green').pack(fill='x', expand=0,side='left',pady=60)
root.mainloop()
运行后窗体效果:
图14—12 pack布局实例运行效果
(2)place布局:place布局管理可以显式指定控件的绝对位置或相对其他控件的位置。
place()方法的调用格式如下。
控件对象名.place(anchor=值1,x=坐标值1,y=坐标值2,relx=值2,rely=值,width=值,height=值,relwidth=值,relheight=值)
相关属性参数如下:
①参数anchor设置控件对象的锚点在父容器中的位置,可取值:nw(左上角,这是默认值)、n(上边)、ne(右上角)、e(右边)、se(右下角)、s(下边)、sw(左下角)、w(左边)、center(中央)。
②参数x和y分别设置控件对象的左上角在父容器中的绝对坐标。
③参数relx和rely设置控件对象在父容器中水平和垂直方向上起始布局的相对位置,相对x/y坐标 取值范围(0.0~1.0),即取整个窗口的几分之几。
④参数width和height分别设置控件对象本身的宽度和高度,单位是像素。
⑤参数relwidth、relheight分别设置控件相对于父容器的宽度和高度的比例,以父容器总宽度为1个单位,取值在0.0~1.0之间的小数。与relx(rely)取值相似。
⑥参数in_设置把控件放置到该选项指定的组件中,指定的组件必须是该控件的父组件。
实例:利用place布局把Button控件放置到Label控件中。
实例代码:
from tkinter import *
root=Tk()
root.title(“place布局实例”)
root.geometry('300x200')
lb1=Label(root,text='Label1显示在窗口中间',fg='green') # 在root中创建一个Label1
bt1=Button(root,text='Button1',fg='red') # 在root中创建一个Button1
lb1.place(relx=0.5,rely=0.5,anchor=“center”) # Label1显示在窗口中间
bt1.place(in_=lb1,anchor=“w”) # 在Label1中显示Button1
bt2=Button(root,text='Button2',fg='blue')
# 在root中创建一个Button2,目的是与Button1相比较
bt2.place(x=10,y=150,anchor=“w”) # Button2显示在root中
root.mainloop()
运行后窗体效果:
图14—13 place布局实例运行效果
(3)grid布局:grid(网格)布局管理器会将控件放置到一个二维的表格里。主控件被分割成一系列的行和列,表格中的每个单元(cell)都可以放置一个控件。
grid()方法的调用格式如下。
控件对象名.grid(row=值,rowspan=值,column=值,columnspan=值,ipadx=值,ipady=值,padx=值,pady=值,sticky=值)
相关属性参数如下:
a.参数row设置插件布放的行数值,从0开始。
b.参数rowspan设置控件跨越的行数,默认为1行,即一个控件只占一个单元格。
c.参数column设置插件布放的列数值,从0开始。
d.参数columnspan设置控件跨越的列数,默认为1列,即一个控件只占一个单元格。
e.参数sticky设置控件在网格中的对齐方式(前提是有额外的空间),默认为居中。
f.参数ipadx和ipady分别设置控件对象内部在水平方向和垂直方向的边距。
g.参数padx和pady分别设置控件对象外部在水平方向和垂直方向的边距。实例:利用grid布局制作登录窗口。
实例代码:
from tkinter import *
root=Tk()
root.title(“grid布局实例”)
root.geometry(“340x130+100+100”) # 设置根窗体的大小和显示位置,显示在右边下方附近
Label(root,text=“用户登录”).grid(row=0,column=1) 
# Label1占据0行1列
Label(root,text=“用户名:”).grid(row=1,column=0,sticky='e') # Label2占据1行0列
Label(root,text=“密码:”).grid(row=2,column=0,sticky='e') # Label3占据2行0列
e1=Entry(root).grid(row=1,column=1) # Entry1占据1行1列
e2=Entry(root).grid(row=2,column=1) # Entry2占据2行1列
Label(root,text=“用户名必须为字母与数字”).grid(row=1,column=2,sticky='w')
# Label4占据1行2列
Label(root,text=“密码必须是6位数字”). grid(row=2,column=2,sticky='w')
# Label5占据2行2列
bt=Button(root,text='登录').grid(row=3,column=1) 
# Botton占据3行1列
mainloop()
运行后窗体效果:
图14—14 grid布局实例运行效果
3.简单 GUI 界面程序设计(仅限于考纲中所列的Tkinter 库中控件)(D)
创建一个GUI界面程序需要以下5个主要步骤。
(1)导入tkinter模块(import tkinter)。
(2)创建一个顶层窗口对象(调用Tk()函数),用于容纳整个GUI应用。
(3)在顶层窗口对象上构建所有的GUI控件。
(4)通过底层应用代码将这些GUI控件连接起来。
(5)进入主事件循环(调用mainloop()函数)。
例3 Python语言tkinter模块中有三种控件布局方法分别是pack方法、grid方法、place方法,下列叙述正确的是(   )
A.三种布局方法可以混合使用
B.grid、pack两种布局方法可以混合使用
C.grid、place两种布局方法可以混合使用
D.三种布局方法都不能混合使用
【答案】 C
【试题分析】 本题主要考查面向对象程序设计的三种控件布局方法,做好本题需要理解面向对象程序设计特征的三种控件布局方法以及它们之间的区别和联系。
【解析】 Python中pack布局、place布局和grid布局三种不同的布局方式中,place布局可以与grid布局共同使用一个主窗口,但在一个主窗口中不能混合使用pack布局和grid布局。
例4 运用Python自带的tkinter库,设计GUI界面,利用复选框实现选择兴趣爱好的功能。复选框如果没有选择任何选项,点击“选择”按钮,标签显示“您还没有选择任何爱好项目”,如果选择了选项,点击“选择”按钮后,将选中的结果显示在标签上,显示“您选择了……”。窗体运行效果如图所示。请将代码段补充完整。
from tkinter import *
import tkinter
root=tkinter.Tk()
root.title('爱好项目选择')
root.geometry(“240x200”)
lb1=Label(root,text='请选择您的爱好项目')
lb1.pack()
CheckVar1=IntVar()
CheckVar2=IntVar()
CheckVar3=IntVar()
CheckVar4=IntVar()
#*******************GUI*******************#
    补充代码处
#*******************End*******************#
ch1=Checkbutton(root,text='足球',variable=CheckVar1,onvalue=1,offvalue=0)
ch2=Checkbutton(root,text='篮球',variable=CheckVar2,onvalue=1,offvalue=0)
ch3=Checkbutton(root,text='游泳',variable=CheckVar3,onvalue=1,offvalue=0)
ch4=Checkbutton(root,text='田径
',variable=CheckVar4,onvalue=1,offvalue=0)
ch1.pack()
ch2.pack()
ch3.pack()
ch4.pack()
btn=Button(root,text=“选择”,command=run)
btn.pack()
lb2=Label(root,text='')
lb2.pack()
root.mainloop()
【参考答案】
def run():
if (CheckVar1.get()==0 and CheckVar2.get()==0 and CheckVar3.get()==0 and CheckVar4.get()==0):
  s=“您还没有选择任何爱好项目”
else:
  s1=“足球” if CheckVar1.get()==1 else""
  s2=“篮球” if CheckVar2.get()==1 else""
  s3=“游泳” if CheckVar3.get()==1 else""
  s4=“田径” if CheckVar4.get()==1 else""
  s=“您选择了%s %s %s %s”%(s1,s2,s3,s4)
lb2.config(text=s)
变式训练18 运用Python自带的tkinter库,设计GUI界面,利用tkinter库中的Entry、Lalbel、Button等控件,输入三边,单击“判断”按钮,判断三边能否构成三角形,如果能构成三角形则显示三角形的面积,结果保留两位小数,否则显示此三边不能形成三角形。
若已知三角形的三条边分别为a、b、c,则面积公式为:
S=
(p为三角形周长的一半,即p=(a+b+c)/2
请在合适位置将代码补充完整。
代码如下:
import tkinter
import math
root=tkinter.Tk()
root.title(“判断三角形”)
#*******************GUI*******************#
      补充代码处
#*******************End*******************#
lab1=tkinter.Label(root,text=“请输入第一条边:”)
lab1.grid(row=0,column=0)
txt1=tkinter.Entry(root)
txt1.grid(row=0,column=1)
lab2=tkinter.Label(root,text=“请输入第二条边:”)
lab2.grid(row=1,column=0)
txt2=tkinter.Entry(root)
txt2.grid(row=1,column=1)
lab3=tkinter.Label(root,text=“请输入第三条边:”)
lab3.grid(row=2,column=0)
txt3=tkinter.Entry(root)
txt3.grid(row=2,column=1)
lab4=tkinter.Label(root,text=“结果”)
lab4.grid(row=3,column=0)
cmdl=tkinter.Button(root,text=“判断”,command=f)
cmdl.grid(row=3,column=1)
root.mainloop()
【解析】 (参考代码)
def f():
  a=eval(txt1.get())
  b=eval(txt2.get())
  c=eval(txt3.get())
  if a+b>c and b+c>a and a+c>b and a>0 and b>0 and c>0:
    p=(a+b+c)/2
    s=math.sqrt((p-a)*(p-b)*(p-c)*p)
    lab4.config(text="三角形面积为:%.2f"%s)
  else:
   lab4.config(text="此三边不能形成三角形")
变式训练19 运用Python自带的tkinter库,设计GUI界面,实现在文本框中输入姓名,单击“提交”按钮,即可在“显示结果”处显示已经提交的姓名,单击“清空”按钮,即可将刚才输入的姓名从文本框中清除。窗体运行后效果如图所示。请在合适位置将代码补充完整。
代码如下:
import tkinter
root=tkinter.Tk()
root.title(“提交姓名”)
root.geometry (“250x250”)
#*******************GUI*******************#
补充代码处
#*******************End*******************#
lab=tkinter.Label(root,text=“姓名:”)
lab.grid(row=0,column=0,sticky=tkinter.W)
txt=tkinter.Entry(root,state=tkinter.NORMAL,width=20)
txt.grid(row=0,column=1)
bul=tkinter.Button(root,text=“清空”,command=sclear)
bul.grid(row=1,column=0,sticky=tkinter.W,pady=10)
bu2=tkinter.Button(root,text=“提交”,command=pu)
bu2.grid(row=1,column=1,sticky=tkinter.W)
lab2=tkinter.Label(root,text=“已经提交:”)
lab2.grid(row=2,column=0)
lab3=tkinter.Label(root,text=“显示结果”)
lab3.grid(row=2,column=1,sticky=tkinter.W)
root.mainloop()
【解析】 (参考代码)
def sclear():
  txt.delete(0,tkinter.END)
def pu():
  f=txt.get()
  lab3.config(text=f)
变式训练20 运用Python自带的tkinter库,设计GUI界面,实现求功函数功能,根据用户输入的两个数值,点击“计算”按钮,将计算的总和填入到文本框中,要求设置结果文本框为只读。窗体运行效果如图所示。请根据要求写出合适的代码。
【解析】 (参考代码)
  from tkinter import *
  root=Tk()
  root.title("求和")
  frame=Frame(root)
  frame.pack(padx=10,pady=10)
  v1=StringVar()
  v2=StringVar()
  v3=StringVar()
  def test(content):
    return content.isdigit()
  testCMD=root.register(test)
  e1=Entry(frame,width=10,textvariable=v1,validate="key", validatecommand=(testCMD,'%P')).grid(row=0, column=0)
  Label(frame, text="+").grid(row=0, column=1)
  e2=Entry(frame, width=10, textvariable=v2,
validate="key", validatecommand=(testCMD,'%P')).grid(row=0, column=2)
  Label(frame, text="=").grid(row=0, column=3)
  e3=Entry(frame, width=10, textvariable=v3, state="readonly").grid(row=0, column=4)
  #*******************GUI*******************#
  def calc():
    result=int(v1.get())+int(v2.get())
    v3.set(result)
  #*******************End*******************#
  Button(frame, text="计算结果", command=calc).grid(row=1, column=2, pady=5)
  mainloop()
变式训练21 运用Python自带的tkinter库,设计一下询问对话框。要求:
(1)设计一个Text控件,字体颜色为“红色”,字体为“隶书”,大小为14;
(2)设计一个询问对话框(询问内容为“台湾,是中国的领土吗 ”);
(3)单击询问对话框 的“是”按钮,Text控件中显示“是的,台湾是中国固有领土!”,单击“否”按钮,显示“不论怎么否认,台湾都是中国固有领土!”。
窗口运行后效果如图所示。请根据要求写出合适的代码。
【解析】 (参考代码)
  import tkinter.messagebox
  import tkinter as tk
  root=tk.Tk()
  root.title("询问对话框")
  root.geometry("240x250+10+10")
  txt1=tk.Text(root,fg="red",bd=2,relief="sunken", width=20,height=10,font=("隶书",14))
  #属性relief 为控件呈现出来的3D浮雕样式,有 flat(平的)、raised(凸起的)、sunken(凹陷的)、groove(沟槽状边缘)和 ridge(脊状边缘) 5种
  txt1.pack(side="top",pady=5)
  x=tk.messagebox.askquestion("对话框","台湾,是中国的领土吗 ")
  if x=="yes":
    txt1.insert("end","是的,台湾是中国固有领土!"+"\\n")
  else:
    txt1.insert("end","不论怎么否认,台湾都是中国固有领土!"+"\\n")
  root.mainloop()
编程题
1.运用Python自带的tkinter库,设计GUI界面,创建一个摄氏温度转换成华氏温度的程序,从输入框输入摄氏度的值,单击“计算”按钮后得到华氏度的值,计算公式:F=1.8*C+32,要求结果数值保留两位小数。窗体运行后效果如图所示。请在合适的位置将代码补充完整。
代码如下:
import tkinter as tk
root=tk.Tk()
root.title(“温度转换”)
root.geometry(“300x200”)
label1=tk.Label(root,text=“摄氏度转华氏度”, height=5,width=20,fg=“blue”)
label1.pack()
entryCd=tk.Entry(root,text=“0”)
entryCd.pack()
#*******************GUI*******************#
     补充代码处
#*******************End*******************#
btnCal=tk.Button(root,text=“计算”, command=wdClicked)
btnCal.pack()
root.mainloop()
解:def wdClicked():
    cd=float(entryCd.get())
    label1.config(text="%.2f℃=%.2f℉"%(cd,cd*1.8+32))
2.运用Python自带的tkinter库,设计GUI界面(窗体),添加合适的控件,实现在文本框中输入内容,单击“提交”按钮,能在屏幕上显示输出。窗体运行后效果如图所示。请根据要求写出合适的代码。
解:from tkinter import *
  import datetime
  root=Tk()
  root.title("新用户注册界面")
  root.geometry("300x200")
  def ss():
     print("您的姓名:",xm.get())
     print("您的性别:",var.get())
     print("您的出生年月:",csny.get())
     t=datetime.date.today().year-int(csny.get()[:4])
     print("您的年龄:",t)
  Label(root,text="姓名").grid(row=1,column=1)
  xm=Entry(root)
  xm.grid(row=1,column=2)
  Label(root,text="性别").grid(row=2,column=1)
  var=StringVar()
  var.set("男")
  rd1=Radiobutton(root,text="男",variable=var,value="男")
  rd1.grid(row=2,column=2)
  rd2=Radiobutton(root,text="女",variable=var,value="女")
  rd2.grid(row=2,column=3)
  Label(root,text="出生年月").grid(row=3,column=1)
  csny=Entry(root)
  csny.grid(row=3,column=2)
  Button(root,text="提交",command=ss).grid(row=4,column=2)
  root.mainloop()
3.运用Python自带的tkinter库,设计GUI界面,利用Listbox实现简单的搜索功能,当搜索条件为空时,搜索结果显示所有人,效果如图所示。在合适的位置将代码补充完整。
代码如下:
from tkinter import *
root=Tk()
root.geometry(“240x220”)
root.title(“搜索”)
list=[“小李”,“老聂”,“小红”,“张三”,“李四”,“王五”,“小王”]
#*******************GUI*******************#
    补充代码处
#*******************End*******************#
lab=Label(root,text=“名称”)
lab.grid(row=1,column=0)
btn=Button(root,text=“搜索”,command=searchBoll)
btn.grid(row=1,column=3)
entry=Entry(root)
entry.grid(row=1,column=1)
root.mainloop()
解:lbox=Listbox(root)
  lbox.grid(row=0,column=1)
  for item in list:
    lbox.insert(END,item)
  def searchBoll():
    lbox.delete(0,END)
    for item in list:
      if entry.get() in item:
        lbox.insert(END,item)
4.运用Python自带的tkinter库,设计GUI界面制作加减乘除计算器:输入两个数,选择一种运算模式(求和、求差、求乘、求除),结果显示在控件中,除法运算结果保留两位小数。窗体运行后显示效果如图所示。请根据要求写出合适的代码。
解:import tkinter as t
  ck=t.Tk()
  ck.title("计算器(加减乘除)")
  ck.geometry("340x220")
  def ys():
    ery3.delete(0,t.END)
    a=int( ery1.get())
    b=int(ery2.get())
    if v.get()==0:
     c=a+b
     lab3.config(text="A+B运算的最终结果C:")
    elif v.get()==1:
      c=a-b
      lab3.config(text="A-B运算的最终结果C:")
    elif v.get()==2:
      c=a*b
      lab3.config(text="A*B运算的最终结果C:")
    else:
      c='%.2f'%(a/b)
      lab3.config(text="A/B运算的最终结果C:")
    ery3.insert(10,str(c))
  def qk():
    v.set(-1)
    ery1.delete(0,t.END)
    ery2.delete(0,t.END)
    ery3.delete(0,t.END)
  lab1=t.Label(ck,text="请输入第一个数A:",width=20,anchor=t.E)
  lab1.grid(row=0,column=0)
  lab2=t.Label(ck,text="请输入第二个数B:",width=20,anchor=t.E)
  lab2.grid(row=1,column=0)
  lab3=t.Label(ck,text="运算的最终结果
C:",width=20,anchor=t.E)
  lab3.grid(row=6,column=0)
  ery1=t.Entry(ck)
  ery1.grid(row=0,column=1)
  ery2=t.Entry(ck)
  ery2.grid(row=1,column=1)
  ery3=t.Entry(ck)
  ery3.grid(row=6,column=1)
  v=t.IntVar()
  v.set(-1)
  jjcc=[("求和",0),("求差",1),("求乘",2),("求除",3)]
  for i,j in jjcc:
t.Radiobutton(ck,text=i,value=j,command=ys,variable=v).grid(row=2+j,column=0)
  t.Button(ck,text="清空",command=qk).grid(row=7, column=0)
  t.Button(ck,text="退出",command=ck.destroy). grid(row=7,column=1)
ck.mainloop()
5.运用Python自带的tkinter库,创建一下窗体,模拟登录界面,要求:当输入用户名和密码时,选中加密显示,输入框中文本显示为星号;选中显示密码,输入框中文本显示输入的密码;点击登录按钮,当用户输入正确的用户名”admin”和密码”123456”时提示“登录成功”,文本颜色改为绿色;输入用户名不正确时提示“用户名错误”,文本颜色变为红色;输入密码不正确时提示“密码错误”,文本颜色变为红色。窗体运行后效果如图所示。请根据要求写出合适的代码。
解:import tkinter as tk
  root=tk.Tk()
  root.title('登录窗口')
  root.geometry('260x150')
 
  def showpd():
    if xs.get()=="加密显示":
      ent2.config(show="*")
    else:
      ent2.config(show="")
  def dl():  #自定义登录函数
    a=ent1.get()
    b=ent2.get()
    if a=="admin" and b=="123456":
    lab1.config(text="登录成功",fg="green")
   elif a!="admin":
    lab1.config(text="用户名错误",fg="red")
   else:
    lab1.config(text="密码错误",fg="red")
def tc():
  root.destroy()
lab1=tk.Label(root,text='登录界面',font=('隶书',25,'bold')) lab1.grid(row=0,column=0,columnspan=2)
lab2=tk.Label(root,text='用户名:')
lab2.grid(row=1,column=0)
ent1=tk.Entry(root,text=")
ent1.grid(row=1,column=1)
lab2=tk.Label(root,text='密码:')
lab2.grid(row=2,column=0)
ent2=tk.Entry(root,text=")
ent2.grid(row=2,column=1)
xs=tk.StringVar()
xs.set(0)
rad1=tk.Radiobutton(root,text='加密显示',variable=xs,value='加密显示',command=showpd)
rad1.grid(row=3,column=0)
rad2=tk.Radiobutton(root,text='显示密码',variable=xs,value='显示密码',command=showpd)
rad2.grid(row=3,column=1)
btn1=tk.Button(root,text='登录',command=dl)
btn1.grid(row=4,column=0)
btn2=tk.Button(root,text='退出',command=tc)
btn2.grid(row=4,column=1)
root.mainloop()

展开更多......

收起↑

资源预览