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 相关文章推荐
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
Jun 15 Python
Python构建网页爬虫原理分析
Dec 19 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
Jan 16 Python
Django处理文件上传File Uploads的实例
May 28 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
python得到电脑的开机时间方法
Oct 15 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
Jan 03 Python
python读取当前目录下的CSV文件数据
Mar 11 Python
Pytorch环境搭建与基本语法
Jun 03 Python
Python如何配置环境变量详解
May 18 Python
Python中的 Set 与 dict
Mar 13 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
ajax实现无刷新分页(php)
2010/07/18 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
子页向父页传值示例
2013/11/27 Javascript
jQuery实现倒计时按钮功能代码分享
2014/09/03 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
vue 地图可视化 maptalks 篇实例代码详解
2019/05/21 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
浅析Python 中整型对象存储的位置
2016/05/16 Python
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
python matplotlib坐标轴设置的方法
2017/12/05 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
python字典嵌套字典的情况下找到某个key的value详解
2019/07/10 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
基于python实现地址和经纬度转换
2020/05/19 Python
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
美国零售商店:Blue&Cream
2017/04/07 全球购物
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
卖房协议书样本
2014/10/30 职场文书
房贷收入证明范本
2015/06/12 职场文书
运动会广播稿50字
2015/08/19 职场文书
体育部部长竞选稿
2015/11/21 职场文书
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript