点击 蘑菇云创造 关注我们
第七课 桌面小挂件
系列课程:
一、学习背景
经过前面两个单元的学习,我们已经掌握了常见的python基础知识,同时,也学会了turtle库的使用,通过turtle库,我们能绘制有趣的图形,创建屏幕窗口,制作小游戏等。为了让我们的小作品更加丰富多彩,在本单元中,我们将引入专业的图形用户界面设计(GUI)中的tkinter库,通过它来创作更加实用更有趣的作品,让我们来体验一下吧!
阅读材料 GUI与Tkinter GUI是Graphical User Interface(图形用户界面)的缩写。在GUI中,并不只是键入文本和返回文本,用户可以看到窗口、按钮、文本框等图形,而且可以用鼠标点击,还可以用键盘键入。GUI是与程序交互的一种不同的方式。有GUI的程序仍然有3个基本要素:输入、处理和输出,但他们的输入和输出更丰富、更有趣一些。 对于Python的GUI开发,有很多工具包可以选择,之所以选择 Tkinter,一是最为简单,二是自带库,不需下载安装,随时使用,跨平台兼容性非常好,三则是从需求出发的,Python 在实际应用中极少用于开发复杂的桌面应用,Tkinter即可满足基本需求。
|
二、学习目标
本实践项目通过编写python程序来设计一个电脑桌面上的透明小挂件。
知识目标:
1、理解面向对象、类、实例、继承的含义
2、掌握创建类以及创建类的实例对象的方法
3、掌握创建__init__方法以及调用父类的__init__()方法
技能目标:
1、掌握使用tkinter库创建窗口的方法
2、掌握使用tkinter库创建透明可拖动悬浮便签小挂件的方法
3、掌握使用tkinter库固定小挂件并添加退出按钮的方法
三、学习准备
1、电脑
2、mind+编程软件
四、学习实践
在本项目中,我们将创建三个由浅入深的python程序,并在最终实现将带有文字的悬浮小挂件固定在电脑桌面上。
1.创建一个可拖动的透明悬浮小挂件
2.在小挂件上添加文字
3.固定小挂件并添加退出按钮
任务1:创建挂件程序设计
在这个程序中,我们将创建一个透明的悬浮小窗口。通过它,我们可以了解通过tkinter库创建窗口并设置窗口各个属性的方式。为此,我们将分三步创建这个程序。首先是分析任务,之后进行程序的编写,最后运行程序并观察效果。
1、任务分析
在这个任务中,我们首先需要创建一个窗口对象作为挂件。为了能使小挂件在桌面上呈现半透明,我们需要为窗口对象设置其透明度。同时,为了保证无论在桌面上打开多少界面,小挂件都能呈现在我们眼前,我们需要将挂件窗口设置在顶层。
整体上我们按照顺序结构的方式编写程序,具体流程如下:
2、程序编写
在正式编写程序代码之前,我们首先要创建一个项目文件及python程序文件。
STEP1:创建与保存项目文件
启动Mind+,另存项目并命名为“桌面小挂件”。
STEP2:创建与保存python文件
创建一个python程序文件“任务一.py”,双击打开。
STEP3:编写程序
import tkinter#导入tkinter库
window = tkinter.Tk()#创建窗口对象
window.title('桌面小挂件')#设置窗口的标题
window.geometry('300x300')#设置窗口的宽和高
window.resizable(width=False, height=False)#设置窗口的宽和高是否可变
window.wm_attributes("-alpha", 0.7)#设置窗口透明度
window.wm_attributes("-topmost", True)#设置窗口永远处于顶层
window.update()#刷新界面
window.mainloop()#进入循环
3、程序运行
运行程序,我们看到:弹出了一个标题为“桌面小挂件”的透明小窗口。无论我们在电脑桌面上打开多少个不同的界面,这个小挂件窗口始终悬浮并显示在我们的屏幕上而不会被其余窗口遮挡。我们可通过拖动窗口上方的灰色部分任意更换其位置。(Tips:下图中背景色为电脑桌面内容)
Tkinter链接 Tkinter库中的函数有很多,每个不同的函数有不同的功能,我们能以“库文件名称.函数名()”的格式使用它们。 |
Tk()函数 功能说明 Tkinter库中的Tk()函数能创建一个主窗口。事实上,这里的Tk()函数就类似于turtle库中的Screen()函数,能创建一个屏幕对象。 使用方法 tkinter.Tk() 举例说明 程序中, window = tkinter.Tk()#创建窗口对象 表示创建一个窗口对象并赋值给window,后续都用window来代表。 |
对象链接 |
title()属性 功能说明 title属性指的是窗口对象的标题 使用方法 窗口对象.title('桌面小挂件') 举例说明 程序中, window.title('桌面小挂件')#设置窗口的标题 表示窗口的标题为“桌面小挂件” |
geometry()属性 功能说明 geometry属性指的是窗口对象的宽和高 使用方法 窗口对象.geometry('widthxheight') 举例说明 程序中, window.geometry('300x300')#设置窗口的宽和高为300 表示窗口的宽和高皆为300。 |
resizable()属性 功能说明 resizable属性指的是窗口对象的长与宽的是否可变性 使用方法 窗口对象.resizable(width=False,height=False),也可用0,1来表示真假值。True表示可变,False表示不可变。 举例说明 程序中, window.resizable(width=False, height=False)#设置窗口的宽和高是否可变 表示窗口的宽和高都不可变化。 |
wm_attributes()属性 功能说明 wm_attributes属性可表示窗口对象的多个不同特征:透明度,是否置于顶层,是否满屏显示,窗口是否为不可以状态
使用方法 对象.wm_attributes(“属性”,结果值) wm_attributes 可选属性字段: -topmost 是否是一个永远最前的窗口,结果值中,True表示真,False表示假,也可用0,1来表示 -alpha 窗口的透明度,结果值中,透明度在0-1,数值越小越透明。 -fullscreen 窗口是否满屏显示,结果值中,True表示真,False表示假,也可用0,1来表示 -disabled 窗口是否是一个不可用的状态(不能有任何操作),结果值中,True表示真,False表示假,也可用0,1来表示
举例说明 程序中, window.wm_attributes("-alpha", 0.7)#设置窗口透明度 表示窗口的透明度为0.7。 window.wm_attributes("-topmost", True)#设置窗口永远处于顶层 表示窗口置于顶层。
|
update()方法 功能说明 update方法能更新窗口界面,继而使窗口保持最新 使用方法 窗口对象update() 举例说明 程序中, window.update()#刷新界面 表示刷新窗口界面 |
mainloop()方法 功能说明 mainloop方法能设置窗口对象的循环显示,继而能使窗口保持最新,一旦检测到事件,就刷新窗口。这里,我们可以将窗口理解为连环画,mainloop就是去翻动连环画。 使用方法 窗口对象.mainloop() 举例说明 程序中, window.mainloop()#进入循环 表示进入窗口循环,刷新窗口显示 |
任务2:添加文字程序设计
在这个程序中,我们将在悬浮的桌面小挂件上书写文字,实现便签的效果。通过它,我们可以了解如何通过tkinter库在窗口上书写文字。为此,我们依旧将分三步创建这个程序。首先是分析任务,之后进行程序的编写,最后运行程序并观察效果。
1、任务分析
我们知道使用turtle库时,可以通过小海龟的移动来书写文字,这是在画布上实现的。事实上,对于tkinter库创建的窗口对象,我们依然可以借助于画布书写文字,只是,这个画布需要我们手动创建。
在这个任务中,我们首先还是创建一个窗口对象。接下来,为了书写文字,我们在窗口中创建并安置一个画布组件。之后我们能在画布上书写具体的文字内容作为备忘录。最后保持窗口的更新并循环显示窗口。
整体上我们依旧按照顺序结构的方式编写程序,具体流程如下:
在上个任务中,对于窗口对象,我们是通过tkinter库中的Tk()函数直接创建的。事实上,我们也可以通过其他方式实现。这里,我们首先创建一个窗口类,之后通过实例化类的方式来创建窗口对象,同时,我们在创建类时创建一个init方法,用来为后续的窗口对象确定其属性特征,具体流程如下,
2、程序编写
STEP1:创建与保存python文件
新建一个python程序文件“任务二.py”,双击打开。
STEP2:编写程序
import tkinter #导入tkinter库
class DragWindow(tkinter.Tk):#创建窗口类
def __init__(self):#创建init实例方法(相当于构造方法)
super().__init__()#继承父类的__init__方法
self.title('桌面小挂件')#设置窗口标题为透明小挂件
self.geometry('300x300')#设置窗口的宽和高
self.resizable(width=False, height=False)#设置窗口的宽和高是否可变
self.wm_attributes("-alpha", 0.5)#设置透明度
self.wm_attributes("-topmost", True)#设置窗口永远处于顶层
window = DragWindow()#创建窗口类的实例对象
#创建一个宽和高为300*300的画布界面,背景色为浅蓝色,边框为厚度为0
canvas=tkinter.Canvas(window,width=300,height=280,highlightthickness=0,bg='light green')
canvas.pack()#通知窗口管理器注册组件并安置
text=canvas.create_text(150,50,text='2011.11.11',font=('Times',16))#画布上书写文字
text=canvas.create_text(150,150,text='今天有雨,出门记得带伞哦',font=('Times',16))
window.update()#更新界面
window.mainloop()#循环
3、程序运行
运行程序,我们看到:弹出了一个标题为“桌面小挂件”的透明浅绿色背景的窗口。在窗口上记录这日期“2011.11.11”及备忘语录“今天有雨,出门记得带伞哦”。同样的,无论我们在电脑桌面上打开多少个不同的界面,这个小挂件窗口始终悬浮并显示在我们的屏幕上而不会被其余窗口遮挡。我们可通过拖动窗口上方的灰色部分任意更换其位置。(Tips:下图中背景色为电脑桌面内容)
知识链接 |
面向对象 知识描述 面向对象(Object Oriented)的英文缩写是OO,它是一种设计思想。从20世纪60年代提出面向对象的概念到现在,它已经发展成为一种比较成熟的编程思想。 面向对象中的对象(Object),通常是指客观世界中存在的对象,这个对象具有唯一性,对象之间各不相同,各有各的特点,每个对象都有自己的运动规律和内部状态;对象与对象之间又是可以相互联系、相互作用的。另外,对象也可以是一个抽象的事物。例如,从圆形、正方形、三角形等图形抽象出一个简单图形,简单图形就是一个对象,它有自己的属性和行为,图形中边的个数就是它的属性,图形的面积也是它的属性,输出图形的面积就是它的行为。概括地讲,面向对象技术是一种从组织结构上模拟客观世界的方法。 在python中,一切都是对象,即不仅是具体的事物称为对象,字符串、函数等也都是对象。这说明python天生就是面向对象的编程语言。 |
类 知识描述 在python中,类表示具有相同属性和方法的对象的集合。通过类可以创建对象。 知识实例 例如,如果把雁群比作大雁类,那么大雁类就具备了嘴巴、翅膀、爪子等属性,也具备了觅食、飞行、睡觉等行为。
同样的,我们人也可视作一种类,身高、体重就是人类的属性,而行走、吃饭、睡觉则是人类的行为。
知识细说 在python语言中,类是一种抽象的概念,如定义一个大雁类,在该类中,可以定义每个对象共有的属性和方法;而一只要从北方飞往南方的大雁则是大雁类的一个对象,对象是类的实例。 |
实例 知识描述 面向对象最重要的概念就是类(Class)和实例(Instance),类是抽象的模板,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。 知识实例 在人类中,你我都是一个个具体的“对象”,这就是实例。我们都具有身高、体重这个属性,但我们的身高和体重的具体数据并不一定相同。
|
继承、子类与父类 知识描述 继承就是让类和类之间产生父子关系,子类可以拥有父类的静态属性和方法。继承是实现重复利用的重要手段,子类通过继承得到了父类的属性和行为的同时,又添加了子类特有的属性和行为。
知识实例 矩形、菱形、平行四边形、梯形等都是四边形,因为四边形与他们都具有共同的特征——拥有四条边。只要将四边形适当地延伸,就会得到上述图形。 因此以平行四边形为例,我们可以把它看作是继承四边形类后产生的类,四边形类就是父类,而平行四边形就是子类,它继承了四边形类的属性和行为,又添加了平行四边形特有的属性和行为,如对边平行且相等。
|
知识积累 |
创建类 功能说明 在使用类创建对象前我们需要先创建类。
使用方法 在python中,类的创建使用class关键字来实现,语法如下: class Classname: statement#类体
参数说明: “Classname”:表示指定类名,一般使用大写字母开头,如果类名中包括两个单词,第二个单词的首字母也大写,这种命名方法也称为“驼峰式命名法”,这是惯例。当然,也可根据自己的习惯命名,但是一般推荐按照惯例来命名。 “statement”:表示类体,主要由类变量(或类成员)、方法、属性等定义语句组成。如果在定义类时,没想好类的具体功能,也可以在类体中直接使用pass语句代替。pass语句是python中的空语句,它不做任何事情,一般起到占位作用。
这里值得注意的是,有时在类名后也会添加“(object)”或其他父类,表示创建的类是从这个父类中继承下来的。
举例说明 程序中, class DragWindow(tkinter.Tk):#创建窗口类 表示创建一个窗口子类,而括号中的“tkinter.Tk”则表示生成一个窗口作为父类,窗口子类继承它的属性和方法。 |
创建__init__方法 功能说明 在创建类后,通常会创建一个“__init__”方法。该方法是一个特殊的方法。每当创建一个类的新实例时,Python都会自动执行它,用来设定类的属性及功能。 使用方法 def __init__(self,parameterlist):#创建init方法 block
其中,block是指方法体,实现的具体功能,parameterlist指的是可选参数。 “__init__”方法必须包含一个self参数,并且必须是第一个参数。self参数是一个指向实例本身的引用,用于访问类中的属性和方法。在方法调用时会自动传递实际参数self。因此,当“__init__”方法只有一个参数时,在创建类的实例时,就不需要指定实际参数了。 另外,在“__init__”方法中,还可以自定义一些参数,参数间使用逗号“,”进行分隔。
举例说明 程序中, def __init__(self):#创建init方法 super().__init__()#继承 self.title('透明小挂件')#设置窗口标题 self.resizable(0, 0)#通知窗口管理器调整布局大小,0,0表示不能被拉升 self.wm_attributes("-alpha", 0.7) # 透明度 self.wm_attributes("-toolwindow", True)# 置为工具窗口 self.wm_attributes("-topmost", True) # 永远处于顶层 这里就是在创建一个“__init__”方法,缩进部分就是类的属性及功能。
|
调用父类的__init__()方法 功能说明 调用父类的__init__()方法能使子类也含有父类的属性特征,也就是实现继承。 使用方法 super().__init__() 在子类的__init__方法中使用 super().__init__() , 就相当于把父类的 __init__方法拿过来用, 并且可以对父类的__init__方法进行补充(比如添加成员属性/方法) ,也就相当于把父类的__init__方法继承过来了, 之后用子类实例化一个对象后, 这个对象可以点出父类对象的成员属性/方法, 当然也可以点出自己类对象的成员属性/方法
举例说明 程序中, class DragWindow(tkinter.Tk):#创建窗口类 def __init__(self):#创建init实例方法(相当于构造方法) super().__init__()#继承
super().__init__()#调用基类的init方法 这里,在窗口子类的__init__方法中使用“super().__init__()”,表示继承父类的“__init__”方法。 |
创建类的实例对象 功能说明 创建完类后,并不会真正创建一个实例对象。这就好比一辆汽车的设计图。设计图可以告诉我们汽车看上去怎么样,但设计图本身不是一辆汽车。我们不能开走它,它只能用来制造真正的汽车,而且可以使用它制造很多汽车。
class语句本身并不会创建类的任何实例。所以在类定义完成后,可以创建类的实例,即实例化该类的对象。通过类的实例对象就可以访问类中的属性和方法。
使用方法 在python中,创建类的实例对象的语法如下: ClasssName(parameterlist)
其中,ClasssName是必选参数,用于指定具体的类,parameterlist是可选参数,当创建一个类时,如果没有创建__init)__方法(后续介绍)或者该方法只有一个self参数时,parameterlist可以省略。 举例说明 程序中, window = DragWindow()#创建窗口类的实例 就是在创建一个窗口类的实例对象,运行后我们就能看到有一个窗口对象生成。 |
Tkinter链接 |
Canvas()控件 功能说明 Canvas是Tkinter中的画布控件,可以显示图形或文本。这里的Canvas与之前海龟绘图中的画布是相似的,只是这里以左上角为坐标原点。 使用方法 tkinter.Canvas(窗口对象,属性参数),其中的属性参数可以是画布的宽、高、边框厚度、背景色等。 举例说明 程序中, canvas = tkinter.Canvas(window, width=300, height=300,highlightthickness=0,bg='light green') 表示在窗口上创建一个宽和高为300像素,背景色为浅蓝色,边框厚度为0的画布对象。 |
对象链接 |
pack()方法 功能说明 pack()方法能设置画布组件的安置位置
值得注意的是,这里的N指代North表示北,W指代West表示西,E指代East表示东,S指代South表示南,同时这里的Canvas画布与turtle库中不同,此处的坐标原点在画布的左上方。
使用方法 画布对象.pack() 举例说明 程序中, canvas.pack()#通知窗口管理器注册组件并安置 表示将画布安置在窗口上 |
create_text()方法 功能说明 .create_text()方法能在画布上书写文字 使用方法 画布对象.create_text(x坐标,y坐标,text=‘文字内容’,font=(‘字体’,字号)) 举例说明 程序中, text=canvas.create_text(150,50,text='2011.11.11',font=('Times',16))#画布上书写文字 表示在画布的(150,50)坐标位开始书写文字,内容为“2011.11.11”,字体为“Times,16号”。 text=canvas.create_text(150,150,text='今天有雨,出门记得带伞',font=('Times',16)) 表示在画布的(150,150)坐标位开始书写文字,内容为“今天有雨,出门记得带伞哦”,字体为“Times,16号”。 |
任务3:固定挂件程序设计
在这个程序中,我们将使可拖动的小挂件固定下来,并为其添加退出按钮。通过它,我们可以了解借助tkinter库在窗口上创建按钮交互的方式。为此,我们依旧将分三步创建这个程序。首先是分析任务,之后进行程序的编写,最后运行程序并观察效果。
1、任务分析
在这个任务中,我们整体编程的方式不变。为了实现固定小挂件的效果,我们可以通过在创建“_init_”方法时,在设置完窗口对象的不可拉伸性后再添加一条不可拖动性。而为了实现按压按钮退出的效果,我们可以在书写完备忘录后为窗口添加按钮组件。
2、程序编写
STEP1:创建与保存python文件
新建一个python程序文件“任务三.py”,双击打开。
STEP2:编写程序
import tkinter #导入tkinter库
class DragWindow(tkinter.Tk):#创建窗口类
def __init__(self):#创建init实例方法(相当于构造方法)
super().__init__()#继承父类的__init__方法
self.title('桌面小挂件')#设置窗口标题为透明小挂件
self.geometry('300x300')#设置窗口的宽和高
self.resizable(width=False, height=False)#设置窗口的宽和高是否可变
self.overrideredirect(True)#设置窗口不可拖动
self.wm_attributes("-alpha", 0.5)#设置透明度
self.wm_attributes("-topmost", True)#设置窗口永远处于顶层
window = DragWindow()#创建窗口类的实例对象
#创建一个宽和高为300*300的画布界面,背景色为浅蓝色,边框为厚度为0
canvas=tkinter.Canvas(window,width=300,height=280,highlightthickness=0,bg='light green')
canvas.pack()#通知窗口管理器注册组件并安置
text=canvas.create_text(150,50,text='2011.11.11',font=('Times',16))#画布上书写文字
text=canvas.create_text(150,150,text='今天有雨,出门记得带伞哦',font=('Times',16))
tkinter.Button(window, text="Exit", command=window.quit).pack(side=tkinter.BOTTOM)#创建关闭窗口按钮
window.update()#更新界面
window.mainloop()#循环
3、程序运行
运行程序,我们看到:标题为“桌面小挂件”的透明浅绿色背景的窗口被固定在了电脑上,此时小挂件不再可被拖动,同时窗口下方显示出一个“Exit”按钮,点击“Exit”退出后,小挂件消失。
对象链接 |
overrideredirect()属性 功能说明 overrideredirect()属性指的是窗口对象的不可拖动性。 使用方法 窗口对象.overrideredirect(真假值),True表示不可拖动,False表示可拖动 举例说明 程序中, self.overrideredirect(True)#设置窗口不可拖动 表示设置窗口对象的不可拖动性为真。 |
Tkinter链接 |
Button()控件 功能说明 Button是Tkinter中的按钮控件,可以实现按钮与窗口的交互效果。 使用方法 tkinter.Button(窗口对象,属性参数),其中的属性参数可以是按钮上显示的文字,实现的效果等。 举例说明 程序中, tkinter.Button(window, text="Exit", command=window.quit).pack()#创建关闭窗口按钮 表示在窗口上创建一个内容为“Exit”的按钮,实现关闭退出窗口的效果,按钮的位置默认在窗口的下方。 |
练一练 至此,桌面上的小挂件已经完成啦,有了它,我们再也不用担心忘记重要的事情啦,是不是很实用呢?让我们依据自己的喜好(内容、颜色、结构编排等)再对桌面小挂件进行优化吧! |
五、巩固提高
项目回顾
本节课我们利用图形用户界面(GUI)中的tkinter库,创建了一个透明悬浮的小挂件,之后在小挂件上添加Canvas画布组件并在画布上书写文字,最后将小挂件固定并添加退出按钮。
知识小结
程序 |
Python知识点 |
创建挂件程序设计 |
无 |
添加文字程序设计 |
面向对象、类、实例、继承、创建类、创建类的实例对象、创建__init__方法、调用父类的__init__()方法 |
固定挂件程序设计 |
无 |
项目拓展
让我们利用今天所学的python知识及创建桌面小挂件的方式,尝试改变窗口的透明度等属性,改变画布的背景色、书写其他文字试试效果吧!
蘑菇云创造
微信号 : mgystem
扫码关注,了解更多
推荐阅读:








