前言
纪念日计算工具 是在了解GUI的规程中,突发奇想写的一个小东西,用到的是Python的 tkinter 控件。本人非开发人员,渣渣数据分析师,如遇大佬请轻喷,如有代码错误或不规范,感谢指正。
主要内容
输入纪念日,得到距离下一个纪念日的时间长度(天),根据时间差的逻辑写成 .py文件,要注意的是年份差距和闰年(2月29日)的处理方式。用 pyinstaller 生成可执行的.exe文件就可以啦。
日期计算函数
1.通过闰年平年来判断天数
def runn(x):
if x%400==0:
return 366
elif x%4==0 and x%100!=0:
return 366
else:
return 365
days=runn(int(datetime.datetime.now().strftime('%Y')))
2.计算时间差(天数)
def calculate(a):
b=pd.to_datetime(a)
if runn(b.year)==366 and b.month==2 and b.day==29:
dd=1461
else:
dd=days
if b.year
years=datetime.datetime.now().year-b.year
b=b.replace(year = b.year + years)
today=pd.to_datetime(datetime.datetime.now().strftime('%Y-%m-%d'))
if (b-today)/pd.Timedelta(1,'D')>=0:
dif=(b-today)/pd.Timedelta(1,'D')
else:
dif=(b-today)/pd.Timedelta(1,'D')+dd
return dif
GUI布局
源代码:
import tkinter
import time
import datetime
import pandas as pd
from dateutil.relativedelta import relativedelta
# 计算纪念日距离天数
def calculate(a):
b=pd.to_datetime(a)
if runn(b.year)==366 and b.month==2 and b.day==29:
dd=1461
else:
dd=days
if b.year
years=datetime.datetime.now().year-b.year
b=b.replace(year = b.year + years)
today=pd.to_datetime(datetime.datetime.now().strftime('%Y-%m-%d'))
if (b-today)/pd.Timedelta(1,'D')>=0:
dif=(b-today)/pd.Timedelta(1,'D')
else:
dif=(b-today)/pd.Timedelta(1,'D')+dd
return dif
def runn(x):
if x%400==0:
return 366
elif x%4==0 and x%100!=0:
return 366
else:
return 365
days=runn(int(datetime.datetime.now().strftime('%Y')))
def gui_cre():
# 创建主窗口
root = tkinter.Tk()
# 设置窗口大小
root.geometry("500x100")
root.title("纪念日计算器")
# 设置输入标签组件
labelName1 = tkinter.Label(root,
text='纪念日日期: ',
justify=tkinter.RIGHT,
width=50)
labelName1.place(x=10, y=10, width=80, height=20)
# 设置输出标签组件
labelName1_o = tkinter.Label(root,
text='纪念日倒计时(天): ',
justify=tkinter.RIGHT,
width=50)
labelName1_o.place(x=250, y=10, width=100, height=20)
# 创建输入文本框组件
varName1 = tkinter.StringVar(root, value='')
entryName1 = tkinter.Entry(root,
width=80,
textvariable=varName1)
entryName1.place(x=100, y=10, width=80, height=20)
# 创建输出文本框组件
anni1 = tkinter.StringVar(root, value='')
Name1 = tkinter.Entry(root,
width=80,
textvariable=anni1)
Name1.place(x=350, y=10, width=80, height=20)
# 创建计算按钮组件,cal()主要把数据从输入文本框取出来
def cal():
raw1 =varName1.get()
print("raw1:",raw1)
ay = calculate(raw1)
print("ay:",ay)
anni1.set(int(ay))
b1 = tkinter.Button(root,
text='计 算',
command=cal)
b1.place(x=100, y=60, width=50, height=20)
# 创建清除按钮组件
def cancel():
varName1.set('')
anni1.set('')
b2 = tkinter.Button(root,
text='清 除',
command=cancel)
b2.place(x=300, y=60, width=50, height=20)
# 启动循环检测
root.mainloop()
if __name__ == '__main__':
gui_cre()
用pyinstaller打包生成.exe文件
1.若没有安装pyinstaller可先用pip安装,可使用镜像加快安装速度
python -m pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
1
1.切换到保存的 .py文件路径,打包为 .exe文件
pyinstaller -F -w 文件名.py
1
打包后的.exe文件预览
在dist目录下生成.exe文件,可双击运行。
运行结果
你学会了吗 需要源码获取加群哦:1136192749