python面对对象计算器_用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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值