基于python的高考倒計時窗口
2022年高考已經(jīng)過了,2023屆的學(xué)生們很快就要迎來2023年的高考。那現(xiàn)在離高考還有多少天呢?我們能不能寫一個小程序讓高考倒計時一直顯示在電腦屏幕上呢?
前期準(zhǔn)備
由于本項目基于Python編寫,所以在編寫本項目時需要安裝Python。我們在本項目中使用的Python版本時Python3.8。
本項目所使用的庫文件均為Python標(biāo)準(zhǔn)庫,所以無需額外安裝庫文件。
認識庫
本項目使用了兩個庫,分別是
tkinter庫
datetime庫
tkinter庫是用于寫圖形化界面的庫:
Tkinter 庫(Tk 接口)是 Python 的標(biāo)準(zhǔn) Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多數(shù)的 Unix 平臺下使用,同樣可以應(yīng)用在?Windows?和?Macintosh?系統(tǒng)里。Tk8.0 的后續(xù)版本可以實現(xiàn)本地窗口風(fēng)格,并良好地運行在絕大多數(shù)平臺中。
datetime庫:
以不同格式顯示日期和時間是程序中最常用到的功能。Python?提供了一個處理時間的標(biāo)準(zhǔn)函數(shù)庫?datetime,它提供了一系列由簡單到復(fù)雜的時間處理方法。datetime?庫可以從系統(tǒng)中獲得時間,并以用戶選擇的格式輸出。
編寫程序
首先我們先來編寫倒計時的代碼
這里使用到了datetime庫
import datetime#導(dǎo)入庫
now = datetime.datetime.now()#獲取現(xiàn)在時間
time2 = datetime.datetime(2023, 6, 7)#設(shè)置高考時間
gaokao_time=str((time2 - now).days)#通過函數(shù)計算出時間差
print(gaokao_time)

然后再讓我們制作倒計時的窗口
首先我們先用Tkinter庫創(chuàng)建一個窗體
我們使用此窗體來獲取屏幕分辨率以用于適配倒計時窗口再不同屏幕下能正常顯示
然后隱藏窗口(因為此窗口僅用于獲取屏幕分辨率)
from tkinter import *#導(dǎo)入tkinterk庫
root = Tk()#創(chuàng)建窗體
root.title('提醒')#設(shè)置窗體標(biāo)題
screen_x =root.winfo_screenwidth()#獲取屏幕x并添加到變量
screen_y =root.winfo_screenheight()#獲取屏幕y并添加到變量
root.attributes('-topmost', True)#窗口置頂
print(screen_x, screen_y)#打印屏幕分辨率
root.withdraw()#隱藏窗體

此時我們便得到了屏幕的分辨率
然后我們再創(chuàng)建一個主窗口來顯示高考倒計時
from tkinter import *#導(dǎo)入tkinterk庫
root3 = Tk()#創(chuàng)建窗體
root3.title('提醒')#窗體標(biāo)題
root3.attributes('-topmost', True)
root3.configure(bg='#696969')#窗體背景
root3.geometry('250x80+' + '100+100' )#設(shè)置窗口大小和位置
root3.resizable(0, 0)#窗體大小不可調(diào)
root3.attributes("-alpha", 0.7)#設(shè)置窗體透明度
root3.overrideredirect(1)#隱藏標(biāo)簽欄
root3.mainloop()#窗體循環(huán)

這時窗體已經(jīng)顯示出來了,在坐標(biāo)100·100的位置
然后我們來設(shè)置窗體顯示的內(nèi)容
將以下的代碼添加到root3.manloop()函數(shù)前即可顯示文字
labele1 = Label(root3, text='測試', font=('微軟雅黑', 25), fg='#F8F8FF', bg='#696969',
? ? ? ? ? ? ? ? ? ? ? ?width=30, height=5)# 設(shè)置標(biāo)簽區(qū)文本為距離高考
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',
? ? ? ? ? ? ? ? ? # 設(shè)置標(biāo)簽區(qū)文本為距離高考
? ? ? ? ? ? ? ? ? width=30, height=5)
labele3.place(relx=0.1, rely=0.7, relheight=0.2, relwidth=0.8)#使用.place方法

關(guān)于label的介紹
Label( )方法可以用于在窗口內(nèi)建立文字或圖像標(biāo)簽
Label(父對象,options,...)
Label( )方法的第一個參數(shù)是父對象,表示這個標(biāo)簽將建立在哪一個父對象(可想成父窗口或稱容器)內(nèi)。
Label( )方法內(nèi)其他常用的options參數(shù):
anchor:
如果空間大于所需時,控制標(biāo)簽的位置,默認是CENTER(居中)
bg或background:
背景色彩
bitmap:
使用默認圖標(biāo)當(dāng)作標(biāo)簽內(nèi)容
borderwidth或bd:
標(biāo)簽邊界寬度,默認是1
compound:
可以設(shè)置標(biāo)簽內(nèi)含圖像和文字時,彼此的位置關(guān)系
cursor:
當(dāng)鼠標(biāo)光標(biāo)在標(biāo)簽上方時的外形。
fg或foreground:
前景色彩
font:
可選擇字形、字形樣式與大小
height:
標(biāo)簽高度,單位是字符
image:
標(biāo)簽以圖像方式呈現(xiàn)
justify:
存在多行文本時最后一行的對齊方式,可取值有LEFT/CENTER/RIGHT(靠左/居中/靠右),默認是居中對齊。
padx/pady:標(biāo)簽文字與標(biāo)簽區(qū)間的間距,單位是像素。
relief:
默認是relief=FLAT,可由此控制標(biāo)簽的外框。
text:
標(biāo)簽內(nèi)容,如果有“\n”則可輸入多行文字
textvariable:
可以設(shè)置標(biāo)簽以變量方式顯示
underline:
可以設(shè)置第幾個文字有下畫線,從0開始算起,默認是-1,表示無下畫線。
width:
標(biāo)簽寬度,單位是字符
wraplength:
本文到多少寬度后換行,單位是像素。
關(guān)于.place方法的參數(shù)介紹
anchor
此選項定義控件在窗體或窗口內(nèi)的方位,可以是N、NE、E、SE、S、SW、W、NW或 CENTER。默認值是 NW,表示在左上角方位。
bordermode
此選項定義控件的坐標(biāo)是否要考慮邊界的寬度。此選項可以是 OUTSIDE 或 INSIDE,默認值是 INSIDE。
height
此選項定義控件的高度,單位是像素。
width
此選項定義控件的寬度,單位是像素。
?in(in_)
此選項定義控件相對于參考控件的位置。若使用在鍵值,則必須使用 in_。
relheight
此選項定義控件相對于參考控件(使用 in_選項)的高度。
relwidth
此選項定義控件相對于參考控件(使用 in_選項)的寬度。
relx
此選項定義控件相對于參考控件(使用 in_選項)的水平位移。若沒有設(shè)置 in_選項,則是相對于父控件。
rely
此選項定義控件相對于參考控件(使用 in_選項)的垂直位移。若沒有設(shè)置 in_選項,則是相對于父控件。
x
此選項定義控件的絕對水平位置,默認值是 0。
y
此選項定義控件的絕對垂直位置,默認值是 0。
我們希望倒計時窗口可以保持在屏幕的右上角
所以我們可以利用到之前獲取到屏幕分辨率
設(shè)置
y=0
x=屏幕分辨率的x值減去窗口大小的x值
from tkinter import *#導(dǎo)入tkinterk庫
root = Tk()#創(chuàng)建窗體
root.title('提醒')#設(shè)置窗體標(biāo)題
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()#創(chuàng)建窗體
root3.title('提醒')#窗體標(biāo)題
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)#窗體大小不可調(diào)
root3.attributes("-alpha", 0.7)#設(shè)置窗體透明度
root3.overrideredirect(1)#隱藏標(biāo)簽欄
labele1 = Label(root3, text='測試', font=('微軟雅黑', 25), fg='#F8F8FF', bg='#696969',
? ? ? ? ? ? ? ? ? ? ? ?width=30, height=5)# 設(shè)置標(biāo)簽區(qū)文本為距離高考
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',
? ? ? ? ? ? ? ? ? # 設(shè)置標(biāo)簽區(qū)文本為距離高考
? ? ? ? ? ? ? ? ? width=30, height=5)
labele3.place(relx=0.1, rely=0.7, relheight=0.2, relwidth=0.8)#使用.place方法
root3.mainloop()#窗體循環(huán)

由于數(shù)字顯示的太集中了,我們在每個數(shù)字時間加上一個空格
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)

為了方便以后我們對獲取高考倒數(shù)時間的調(diào)用,我們把獲取高考剩余時間的代碼封到函數(shù)里面
記得要聲明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)+'天'
在實際使用過程中,我們發(fā)現(xiàn)如果將倒計時放在右上角會影響我們關(guān)閉窗口的操作
所以我們要將窗口向下移動一點以空出操作的位置
scree_y2 = 25?screen_x2 = screen_x - 250?
?root3.geometry('250x70+' + str(screen_x2) + '+' + str(int(scree_y2)))
到這里我們程序需要用到的各個模塊就完成了,接下來我們只需要將它們組裝起來即可

總結(jié)
以上就是我們今天制作的項目,利用Python寫一個可以置于屏幕頂層的高考倒計時窗口!
如果想要電腦開機就運行文件,可以將相應(yīng)文件移動到電腦的'啟動'文件夾里,在后臺回復(fù)'啟動路徑'即可獲取教程。
我們也將原文件的.py .pyw 和可以在電腦上運行的.exe文件打包好,只需要
關(guān)注微信公眾號'infinite imagination?'
并在后臺回復(fù)關(guān)鍵詞'高考倒計時'即可獲文件!