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 制作图片转pdf工具
Jan 30 Python
基于python socketserver框架全面解析
Sep 21 Python
python skimage 连通性区域检测方法
Jun 21 Python
python斐波那契数列的计算方法
Sep 27 Python
Python3.5面向对象与继承图文实例详解
Apr 24 Python
python日期相关操作实例小结
Jun 24 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
Aug 13 Python
django项目用higcharts统计最近七天文章点击量
Aug 17 Python
Python 一行代码能实现丧心病狂的功能
Jan 18 Python
python抢购软件/插件/脚本附完整源码
Mar 04 Python
python办公自动化之excel的操作
May 23 Python
python实现A*寻路算法
Jun 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
php像数组一样存取和修改字符串字符
2014/03/21 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
php设计模式之单例模式用法经典示例分析
2019/09/20 PHP
php框架知识点的整理和补充
2021/03/01 PHP
Javascript中this的用法详解
2014/09/22 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
javascript中arguments,callee,caller详解
2016/03/16 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
Python3 max()函数基础用法
2019/02/19 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
举例讲解Python装饰器
2020/12/24 Python
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
中国高端家电购物商城:顺电
2018/03/04 全球购物
预备党员党校学习自我评价分享
2013/11/12 职场文书
高一地理教学反思
2014/01/18 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
楚门的世界观后感
2015/06/03 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
消防安全培训工作总结
2015/10/23 职场文书
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android