Python制作简易版小工具之计算天数的实现思路


Posted in Python onFebruary 13, 2020

需求

给定一个日期,格式如 “2020-2-12”,计算出这个日期是 2020 年的第几天?

实现思路

  1. 使用 tkinter 和 tkinter.ttk 对界面进行布置;
  2. 使用 calendar 计算天数;
  3. 规范输入日期的格式;
  4. 对月份,天数进行逻辑判断;
  5. 输入错误抛出异常提示。

代码实现

# -*- coding: utf-8 -*-
'''
@File: calc_day_v2.py
@Time: 2020/02/12 20:33:22
@Author: 大梦三千秋
@Contact: yiluolion@126.com
'''
# Put the import lib here
from tkinter import *
import tkinter.messagebox as messagebox
from tkinter import ttk
import calendar
class MyException(BaseException):
  '''自定义异常类
  '''
  def __init__(self, message):
    self.message = message
def calculate(*args):
  '''计算天数方法
  '''
  try:
    # 用以存储天数
    nums = 0
    # 获取输入框中的数据
    year, month, day = [int(elem) for elem in date.get().split('-')]
    # 判断月份,规定在 1-12 之间
    if 1 <= month <= 12:
      # 遍历计算天数
      for month_x in range(1, month + 1):
        # 计算每月的天数
        _, month_day = calendar.monthrange(year, month_x)
        # 遍历的月份等于当前月份,对天数进行规整
        if month_x == month:
          # 文本输入框给出的天数不符合,则抛出异常
          if day > month_day:
            raise MyException("信息输入错误,注意天数!")
          continue
        nums += month_day
      nums += day
      # 设置值到文本框
      days.set(nums)
      the_year.set(year)
    else: # 月份超出范围抛出异常
      raise MyException("信息输入错误,注意月份!")
  except MyException as e:
    messagebox.showinfo(title="输入信息错误", message=e)
  except Exception as e:
    # print(e)
    messagebox.showinfo(title="输入信息错误", message="输出格式错误,按照 2020-2-12 这样的格式输入。注意月份,天数!")
root = Tk()
root.title("计算天数")
# 设置框架
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, S, E, W))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
date = StringVar()
the_year = StringVar()
days = StringVar()
# 文本框部件布置
date_entry = ttk.Entry(mainframe, width=10, textvariable=date)
date_entry.grid(column=2, row=1, sticky=(W, E))
# 标签及按钮的布置
ttk.Label(mainframe, text="例如:2020-2-12").grid(column=5, row=1, sticky=(W, E))
ttk.Label(mainframe, textvariable=days).grid(column=4, row=2, sticky=(W, E))
ttk.Label(mainframe, textvariable=the_year).grid(column=2, row=2, sticky=(W, E))
ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=5, row=3)
ttk.Label(mainframe, text="日期:").grid(column=1, row=1, sticky=E)
ttk.Label(mainframe, text="这一天是").grid(column=1, row=2, sticky=E)
ttk.Label(mainframe, text="年的第").grid(column=3, row=2, sticky=E)
ttk.Label(mainframe, text="天").grid(column=5, row=2, sticky=W)
# 设置内边距
for child in mainframe.winfo_children():
  child.grid_configure(padx=5, pady=5)
date_entry.focus()
root.bind('<Return>', calculate)
root.mainloop()

使用效果

正确输入的效果如下:

 Python制作简易版小工具之计算天数的实现思路

未按照格式输入,错误提示效果:

 Python制作简易版小工具之计算天数的实现思路

月份输入错误,提示效果如下:

 Python制作简易版小工具之计算天数的实现思路

天数超出当月范围的错误提示效果:

 Python制作简易版小工具之计算天数的实现思路

本篇的内容主要是对昨天的 tkinter 模块的延展使用,实现一个计算天数的小工具。

以上所述是小编给大家介绍的Python制作简易版小工具之计算天数的实现思路,希望对大家有所帮助!

Python 相关文章推荐
基于Python实现的扫雷游戏实例代码
Aug 01 Python
进一步探究Python的装饰器的运用
May 05 Python
Python获取某一天是星期几的方法示例
Jan 17 Python
Python实现JSON反序列化类对象的示例
Jan 31 Python
matplotlib subplots 设置总图的标题方法
May 25 Python
Django+JS 实现点击头像即可更改头像的方法示例
Dec 26 Python
利用anaconda作为python的依赖库管理方法
Aug 13 Python
Python timer定时器两种常用方法解析
Jan 20 Python
python实现3D地图可视化
Mar 25 Python
Python configparser模块操作代码实例
Jun 08 Python
Pytorch可视化的几种实现方法
Jun 10 Python
Python使用永中文档转换服务
May 06 Python
解决python-docx打包之后找不到default.docx的问题
Feb 13 #Python
Python更新所有已安装包的操作
Feb 13 #Python
python离线安装外部依赖包的实现
Feb 13 #Python
python获取依赖包和安装依赖包教程
Feb 13 #Python
python连接mongodb集群方法详解
Feb 13 #Python
安装完Python包然后找不到模块的解决步骤
Feb 13 #Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 #Python
You might like
将数组写入txt文件 var_export
2009/04/21 PHP
php 错误处理经验分享
2011/10/11 PHP
用php+ajax新建流程(请假、进货、出货等)
2017/06/11 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
YII2框架使用控制台命令的方法分析
2020/03/18 PHP
用于table内容排序
2006/07/21 Javascript
javascript的console.log()用法小结
2012/05/31 Javascript
jquery队列函数用法实例
2014/12/16 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
利用vue写todolist单页应用
2016/12/15 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
Windows下python2.7.8安装图文教程
2016/05/26 Python
python实现数据写入excel表格
2018/03/25 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
Python内置数据类型list各方法的性能测试过程解析
2020/01/07 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
法国在线宠物店:zooplus.fr
2018/02/23 全球购物
GWebs公司笔试题
2012/05/04 面试题
学院领导推荐信
2013/10/30 职场文书
中秋晚会活动方案
2014/08/31 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
python实现过滤敏感词
2021/05/08 Python
Python3 类型标注支持操作
2021/06/02 Python