用python写一个纪念日计算工具

时间:2020-8-23 作者:admin


用python写一个纪念日计算工具

前言

纪念日计算工具 是在了解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<datetime.datetime.now().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布局

用python写一个纪念日计算工具

源代码:

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<datetime.datetime.now().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.切换到保存的 .py文件路径,打包为 .exe文件

pyinstaller -F -w 文件名.py

打包后的.exe文件预览

在dist目录下生成.exe文件,可双击运行。
用python写一个纪念日计算工具

运行结果

用python写一个纪念日计算工具

最后提前祝马英俊生日快乐吧~

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。