基于python的高考倒计时窗口
2022年高考已经过了,2023届的学生们很快就要迎来2023年的高考。那现在离高考还有多少天呢?我们能不能写一个小程序让高考倒计时一直显示在电脑屏幕上呢?
前期准备
由于本项目基于Python编写,所以在编写本项目时需要安装Python。我们在本项目中使用的Python版本时Python3.8。
本项目所使用的库文件均为Python标准库,所以无需额外安装库文件。
认识库
本项目使用了两个库,分别是
tkinter库
datetime库
tkinter库是用于写图形化界面的库:
Tkinter 库(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
datetime库:
以不同格式显示日期和时间是程序中最常用到的功能。Python 提供了一个处理时间的标准函数库 datetime,它提供了一系列由简单到复杂的时间处理方法。datetime 库可以从系统中获得时间,并以用户选择的格式输出。
编写程序
首先我们先来编写倒计时的代码
这里使用到了datetime库
import datetime#导入库
now = datetime.datetime.now()#获取现在时间
time2 = datetime.datetime(2023, 6, 7)#设置高考时间
gaokao_time=str((time2 - now).days)#通过函数计算出时间差
print(gaokao_time)

然后再让我们制作倒计时的窗口
首先我们先用Tkinter库创建一个窗体
我们使用此窗体来获取屏幕分辨率以用于适配倒计时窗口再不同屏幕下能正常显示
然后隐藏窗口(因为此窗口仅用于获取屏幕分辨率)
from tkinter import *#导入tkinterk库
root = Tk()#创建窗体
root.title('提醒')#设置窗体标题
screen_x =root.winfo_screenwidth()#获取屏幕x并添加到变量
screen_y =root.winfo_screenheight()#获取屏幕y并添加到变量
root.attributes('-topmost', True)#窗口置顶
print(screen_x, screen_y)#打印屏幕分辨率
root.withdraw()#隐藏窗体

此时我们便得到了屏幕的分辨率
然后我们再创建一个主窗口来显示高考倒计时
from tkinter import *#导入tkinterk库
root3 = Tk()#创建窗体
root3.title('提醒')#窗体标题
root3.attributes('-topmost', True)
root3.configure(bg='#696969')#窗体背景
root3.geometry('250x80+' + '100+100' )#设置窗口大小和位置
root3.resizable(0, 0)#窗体大小不可调
root3.attributes("-alpha", 0.7)#设置窗体透明度
root3.overrideredirect(1)#隐藏标签栏
root3.mainloop()#窗体循环

这时窗体已经显示出来了,在坐标100·100的位置
然后我们来设置窗体显示的内容
将以下的代码添加到root3.manloop()函数前即可显示文字
labele1 = Label(root3, text='测试', font=('微软雅黑', 25), fg='#F8F8FF', bg='#696969',
width=30, height=5)# 设置标签区文本为距离高考
labele1.place(relx=0.1, rely=0.15, relheight=0.5, relwidth=0.8)#使用.place方法
labele3 = Label(root3, text="距 离 高 考", font=('微软雅黑', 10), fg='#F8F8FF', bg='#696969',
# 设置标签区文本为距离高考
width=30, height=5)
labele3.place(relx=0.1, rely=0.7, relheight=0.2, relwidth=0.8)#使用.place方法

关于label的介绍
Label( )方法可以用于在窗口内建立文字或图像标签
Label(父对象,options,...)
Label( )方法的第一个参数是父对象,表示这个标签将建立在哪一个父对象(可想成父窗口或称容器)内。
Label( )方法内其他常用的options参数:
anchor:
如果空间大于所需时,控制标签的位置,默认是CENTER(居中)
bg或background:
背景色彩
bitmap:
使用默认图标当作标签内容
borderwidth或bd:
标签边界宽度,默认是1
compound:
可以设置标签内含图像和文字时,彼此的位置关系
cursor:
当鼠标光标在标签上方时的外形。
fg或foreground:
前景色彩
font:
可选择字形、字形样式与大小
height:
标签高度,单位是字符
image:
标签以图像方式呈现
justify:
存在多行文本时最后一行的对齐方式,可取值有LEFT/CENTER/RIGHT(靠左/居中/靠右),默认是居中对齐。
padx/pady:标签文字与标签区间的间距,单位是像素。
relief:
默认是relief=FLAT,可由此控制标签的外框。
text:
标签内容,如果有“\n”则可输入多行文字
textvariable:
可以设置标签以变量方式显示
underline:
可以设置第几个文字有下画线,从0开始算起,默认是-1,表示无下画线。
width:
标签宽度,单位是字符
wraplength:
本文到多少宽度后换行,单位是像素。
关于.place方法的参数介绍
anchor
此选项定义控件在窗体或窗口内的方位,可以是N、NE、E、SE、S、SW、W、NW或 CENTER。默认值是 NW,表示在左上角方位。
bordermode
此选项定义控件的坐标是否要考虑边界的宽度。此选项可以是 OUTSIDE 或 INSIDE,默认值是 INSIDE。
height
此选项定义控件的高度,单位是像素。
width
此选项定义控件的宽度,单位是像素。
in(in_)
此选项定义控件相对于参考控件的位置。若使用在键值,则必须使用 in_。
relheight
此选项定义控件相对于参考控件(使用 in_选项)的高度。
relwidth
此选项定义控件相对于参考控件(使用 in_选项)的宽度。
relx
此选项定义控件相对于参考控件(使用 in_选项)的水平位移。若没有设置 in_选项,则是相对于父控件。
rely
此选项定义控件相对于参考控件(使用 in_选项)的垂直位移。若没有设置 in_选项,则是相对于父控件。
x
此选项定义控件的绝对水平位置,默认值是 0。
y
此选项定义控件的绝对垂直位置,默认值是 0。
我们希望倒计时窗口可以保持在屏幕的右上角
所以我们可以利用到之前获取到屏幕分辨率
设置
y=0
x=屏幕分辨率的x值减去窗口大小的x值
from tkinter import *#导入tkinterk库
root = Tk()#创建窗体
root.title('提醒')#设置窗体标题
screen_x =root.winfo_screenwidth()#获取屏幕x并添加到变量
screen_y =root.winfo_screenheight()#获取屏幕y并添加到变量
root.attributes('-topmost', True)#窗口置顶
print(screen_x, screen_y)#打印屏幕分辨率
root.withdraw()#隐藏窗体
root3 = Tk()#创建窗体
root3.title('提醒')#窗体标题
root3.attributes('-topmost', True)
root3.configure(bg='#696969')#窗体背景
scree_y2 = 25
screen_x2 = screen_x - 250
root3.geometry('250x70+' + str(screen_x2) + '+' + str(int(scree_y2)))
root3.resizable(0, 0)#窗体大小不可调
root3.attributes("-alpha", 0.7)#设置窗体透明度
root3.overrideredirect(1)#隐藏标签栏
labele1 = Label(root3, text='测试', font=('微软雅黑', 25), fg='#F8F8FF', bg='#696969',
width=30, height=5)# 设置标签区文本为距离高考
labele1.place(relx=0.1, rely=0.15, relheight=0.5, relwidth=0.8)#使用.place方法
labele3 = Label(root3, text="距 离 高 考", font=('微软雅黑', 10), fg='#F8F8FF', bg='#696969',
# 设置标签区文本为距离高考
width=30, height=5)
labele3.place(relx=0.1, rely=0.7, relheight=0.2, relwidth=0.8)#使用.place方法
root3.mainloop()#窗体循环

由于数字显示的太集中了,我们在每个数字时间加上一个空格
import datetimenow = datetime.datetime.now()time2 = datetime.datetime(2023, 6, 7)gaokao_time=str((time2 - now).days)num_len=len(gaokao_time)if num_len==3: gaokao_time = str(gaokao_time[0]) + ' ' + str(gaokao_time[1]) + ' ' + str(gaokao_time[2]) + ' 天'elif num_len==2: gaokao_time = str(gaokao_time[0]) + ' ' + str(gaokao_time[1]) + ' 天'elif num_len==1: gaokao_time = str(gaokao_time[0]) + ' 天'else: gaokao_time = str((time2 - now).days)+'天'print(gaokao_time)

为了方便以后我们对获取高考倒数时间的调用,我们把获取高考剩余时间的代码封到函数里面
记得要声明gaokao_time为全局变量
def getting_gaokao_time(): global gaokao_time now = datetime.datetime.now() time2 = datetime.datetime(2023, 6, 7) gaokao_time=str((time2 - now).days) num_len=len(gaokao_time) if num_len==3: gaokao_time = str(gaokao_time[0]) + ' ' + str(gaokao_time[1]) + ' ' + str(gaokao_time[2]) + ' 天' elif num_len==2: gaokao_time = str(gaokao_time[0]) + ' ' + str(gaokao_time[1]) + ' 天' elif num_len==1: gaokao_time = str(gaokao_time[0]) + ' 天' else:
gaokao_time = str((time2 - now).days)+'天'
在实际使用过程中,我们发现如果将倒计时放在右上角会影响我们关闭窗口的操作
所以我们要将窗口向下移动一点以空出操作的位置
scree_y2 = 25
screen_x2 = screen_x - 250
root3.geometry('250x70+' + str(screen_x2) + '+' + str(int(scree_y2)))
到这里我们程序需要用到的各个模块就完成了,接下来我们只需要将它们组装起来即可

总结
以上就是我们今天制作的项目,利用Python写一个可以置于屏幕顶层的高考倒计时窗口!
如果想要电脑开机就运行文件,可以将相应文件移动到电脑的'启动'文件夹里,在后台回复'启动路径'即可获取教程。
我们也将原文件的.py .pyw 和可以在电脑上运行的.exe文件打包好,只需要
关注微信公众号'infinite imagination '
并在后台回复关键词'高考倒计时'即可获文件!