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 SQLite3数据库操作类分享
Jun 10 Python
Python中使用PIPE操作Linux管道
Feb 04 Python
Python实现网络端口转发和重定向的方法
Sep 19 Python
Django自定义分页与bootstrap分页结合
Feb 22 Python
python石头剪刀布小游戏(三局两胜制)
Jan 20 Python
解决Django一个表单对应多个按钮的问题
Jul 18 Python
python日志模块logbook使用方法
Sep 19 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 Python
深入理解Python 多线程
Jun 16 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
Django框架安装及项目创建过程解析
Sep 14 Python
python自动化测试通过日志3分钟定位bug
Nov 20 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
收集的php编写大型网站问题集
2007/03/06 PHP
js获取单选按钮的数据
2006/11/27 Javascript
JS 控制非法字符的输入代码
2009/12/04 Javascript
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
Python是编译运行的验证方法
2015/01/30 Python
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
python实现图书管理系统
2018/03/12 Python
详解Python3 pandas.merge用法
2019/09/05 Python
python的等深分箱实例
2019/11/22 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
土木工程应届生自荐信
2013/09/24 职场文书
法学研究生自我鉴定范文
2013/12/04 职场文书
高一英语教学反思
2014/01/22 职场文书
眼镜促销方案
2014/03/15 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
孔子观后感
2015/06/08 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
运动会跳远广播稿
2015/08/19 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL