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实现telnet服务器的方法
Jul 10 Python
Python循环语句中else的用法总结
Sep 11 Python
python语音识别实践之百度语音API
Aug 30 Python
python实现一组典型数据格式转换
Dec 15 Python
python进行TCP端口扫描的实现
Dec 21 Python
python实现统计文本中单词出现的频率详解
May 20 Python
Python:二维列表下标互换方式(矩阵转置)
Dec 02 Python
Windows下python3安装tkinter的问题及解决方法
Jan 06 Python
Django项目在pycharm新建的步骤方法
Mar 02 Python
Python可视化学习之seaborn绘制矩阵图详解
Feb 24 Python
Python图像处理库PIL详细使用说明
Apr 06 Python
Python使用pandas导入csv文件内容的示例代码
Dec 24 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
基于PHPExcel的常用方法总结
2013/06/13 PHP
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
2020/11/11 Javascript
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
python获取远程图片大小和尺寸的方法
2015/03/26 Python
使用Python实现一个简单的项目监控
2015/03/31 Python
Python获取文件所在目录和文件名的方法
2017/01/12 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
如何给Python代码进行加密
2020/01/10 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
static关键字的用法
2013/10/07 面试题
技术经理的自我评价范文
2013/12/03 职场文书
负责人任命书范本
2014/06/04 职场文书
超市创业计划书
2014/09/15 职场文书
大学四年个人总结
2015/03/03 职场文书
在校学生证明格式
2015/06/24 职场文书
公司员工管理制度
2015/08/04 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers
Vue操作Storage本地化存储
2022/04/29 Vue.js